您的位置:首页 > 其它

有关const的一些知识点

2014-03-12 10:06 211 查看
const可以在运行时初始化,也可以在编译时初始化。

cosnt int i = get_size() //运行时初始化
const int i = 4 //编译时初始化,编译器会在用到i的地方进行替换

默认情况下,const只在文件内有效。如果确实需要在文件间共享,可以使用extern关键字(不管是定义或者声明都需要添加)。
const作用到引用上,则该引用不能修改被引用的值。
初始化对const的引用:

int i = 42;
cosnt int &r1 = i; //允许将const int &绑定到到普通int上
int &r2 = 42; //错误!引用的类型必须与其所引用的对象类严格匹配。引用必须绑定到对象上!!!
const int &r3 = 42 //正确!const引用可以绑定到字面量!

在常量引用绑定到另外一个类型时发生了什么:

double dval = 3.14;
cosnt int &r1 = dval;

编译器会将上述代码变成如下形式(为了确保类型一致):

cosnt int tmp = dval;
cosnt int &r1 = tmp;

我们设想如果没有const时,若是将引用绑定到一个临时变量上,比如一个字面量42上,想要改变引用的值得时候,就没有意义了,c++将这种绑定视为非法。

指向常量的指针(仅仅要求不能通过指针改变所指向对象的值,并不要求对象本身是const的):

const double pi = 3.14;
const double *ptr = π
double dval = 3.14;
cosnt double *ptr1 = &dval; //正确,允许一个指向常量的指针指向非常量对象。

常量指针(必须初始化,一旦初始化完成,存放在指针中的地址就不能改变了):

int errn = 0;
int * const pt = &errn;
cosnt double pi = 3.14;
cosnt double *const pip = π //指向常量对象的常量指针

顶层const:指针本身是个常量。
底层const:指针所指对象是个常量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: