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

(66)变量

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

(67)引用

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

int ival= 1024;

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

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

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

(68)const引用

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

constint ival = 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();

猜你喜欢

转载自blog.csdn.net/liulianglin/article/details/26621583