100个windows平台C++开发错误之十四初始化问题

更多精彩内容,请见:http://www.16boke.com


by zxy,Java/C++编程交流群:168424095

(66)变量

内置类型变量是否初始化决定于变量的定义位置,在函数体外定义的变量都自动初始化为0,函数体内定义的变量都不进行自动初始化。类类型变量的初始化,类通过定义一个或多个构造函数来控制类对对象的初始化,如果定义某个类的变量时没有提供初始化式,这个类就通过默认构造函数来实现。

(67)引用

引用必须被初始化,必须用左值来初始化,必须用与该引用同类型的对象初始化。

int ival= 1024;

int &refVal=ival;// ok: refVal refers to ival

int &refVal2;      //错误:引用必须被初始化

int &refVal3= 10; //错误:必须用对象进行初始化

(68)const引用

const引用是指向const 对象的引用。const引用可以初始化为不同但相关的类型的对象或者初始化为右值,如字面值常量。

constintival = 1024;

int &ref2=ival;//错误:非const引用指向const对象

const int &refVal = ival; //正确:引用和对象都是const

可以读取但不能修改const引用,因此,任何对const引用的赋值都是不合法的。

ref2是普通的非const 引用,因此可以用来修改ref2 指向的对象的值。通过ref2 ival 赋值会导致修改const对象的值。为阻止这样的修改,需要规定将普通的引用绑定到const对象是不合法的。

(69)const而非define定义整型常量

原因:#define定义的宏没有参数类型,只是简单的替换,不会加入到符号列表中。

(70)error C2440: “初始化”:无法从“const char *”转换为“char *”

char *ch =string("11").c_str();

改为

const char *ch =string("11").c_str();


更多精彩内容,请见:http://www.16boke.com

你可能感兴趣的:(100个windows平台C++开发错误之十四初始化问题)