C++中涉及到的概念
来源:互联网 发布:windows longhorn音乐 编辑:程序博客网 时间:2024/05/16 10:05
初始化与赋值的区别:
初始化:初始化在计算机编程领域中指为数据对象或变量赋初值的做法,如何初始化则取决于所用的程序语言以及所要初始化的对象的存储类型等属性。用于进行初始化的程序结构则称为初始化器或初始化列表。初始化和变量声明是明显有区别的,而且初始化也先于变量声明进行,但两者在实践中仍常被混淆。
在C/C99/C++中,初始化器是声明器的可选部分,它由一个'='以及其后的一个表达式(或含有多个以','隔开的带圆括号表达式的单一列表)所组成。后面这一列表有时也被称为“初始化(器)列表”(initializer list)或”初始化列表”(initialization list),不过initializer list也是C++中用于初始化类或结构中的元素的保留字。
一个包含初始化的声明则通常被称为定义。根据C++标准规定,定义是声明的一种;具体来说,声明只需为函数或数据对象指定类型即可,而定义则还必须为其赋初值
默认初始化
在程序里,数据初始化也可能在没有由明确的语法来实现的情况下进行。例如说,如果一个静态变量在没有初始化(即未指定初值)的情况下被声明,则:
对于原生数据类型:以对应类型的零值进行初始化;
对于类中的静态对象:由其默认的构造函数来进行初始化。
先来个区别说明:赋值操作是在两个已经存在的对象间进行的,而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。编译器会区别这两种情 况,赋值的时候调用重载的赋值运算符,初始化的时候调用拷贝构造函数。如果类中没有拷贝构造函数,则编译器会提供一个默认的。这个默认的拷贝构造函数只是 简单地复制类中的每个成员。区别说明:赋值操作是在两个已经存在的对象间进行的,而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。int a=12 ; //初始化, copy 0X000C to a a =12 ; //赋值, copy 0X000C to a1、静态变量在定义时未显式地指定初值,则自动初始化为相应类型的零值(数值型为0或0.0;字符型为'/0'),即静态变量能够自动初始化(有称之为隐式初始化),且静态变量只初始化一次。静态变量定义时显式地指定了值,则其初值为指定的值。定义时无论是否显式地指定了初始值,都只能被初始化一次。但可以通过赋值的方式多次修改静态变量的值。2、初始化与赋值是不同的概念。静态变量的初始化是在编译时进行,变量的赋值是在函数或程序运行时进行。静态变量只初始化一次,但可以通过赋值的方式多次修改静态变量的值 因为如果赋值语句可能会调用两次该成员的构造函数,而初始化只会调用一次,一般而言,重复的函数调用是浪费资源的,尤其是当构造函数和赋值操作符分配内存的时候。在一些大的类里面,你可能拥有一个构造函数和一个赋值操作符都要调用同一个负责分配大量内存空间的Init函数。在这种情况下,你必须使用初始化列表,以避免不要的分配两次内存。注意分析程序
#include "stdafx.h"#include <iostream>using namespace std;void pr();void pt();void pk();int i;int main(int argc, char* argv[]){for(i=0;i<5;i++){pr();}printf("\n");for(i=0;i<5;i++){pt();}printf("\n");for (i=0;i<5;i++){pk();}return 0;}void pr(){static int i=0;printf("%d:",i);for (i=1;i<=5;i++){printf("%c","*");}printf("\n");}void pt(){static int i;printf("%d:",i);for (;i<5;i++){printf("%c","*");}printf("\n");}void pk(){static int i;printf("%d",i);for (i=0;i<=5;i++){printf("%c","*");}printf("\n");}
运行结果:
- C++中涉及到的概念
- 并发编程中涉及到的一些概念
- android开发过程中涉及到的“概念”摘要
- C语句中涉及到条件判断时的情况分析
- 运动控制所涉及到的部分概念
- 单片机开发涉及到的几个概念
- android手机涉及到的存储空间概念扫盲
- UML类图中会涉及到的一些概念、关系
- 云服务开发涉及到的一些概念
- java char String中涉及到的length字符长度概念的研究
- 关于图像处理中所涉及到的一些边缘概念及名词解析
- SY_split_KitPO中涉及到的几张表!
- 阅读中涉及到的1
- 项目中涉及到的BAPI
- ucos2中涉及到的英文
- ACM中涉及到的数学知识
- jbpm涉及到的几个重要概念及常用API
- Java String类涉及到UTF16编码的几个概念
- PyQt4 QTextBrowser 使用教程
- Java运用JFrame实现右键菜单改变背景颜色
- Android之ksoap2-android详解与调用天气预报Webservice完整实例
- Qt Stylesheets Tutorial
- 58,Qt(03)
- C++中涉及到的概念
- Qt 的一些心得
- *PyQt4 精彩实例分析* 实例19 利用QPalette改变控件颜色
- goagent: 403 Your client does not have permission to get URL /2 from this server
- 在onCreate方法中获取某个View的宽度和高度
- Git 文件状态
- vc中debug版程序正常但release版错误
- c语言malloc和free
- Java优先队列(PriorityQueue)示例