有关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:指针所指对象是个常量。
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:指针所指对象是个常量。
相关文章推荐
- 有关密码本小项目的一些知识点总结(二)
- C++中有关的复合类型变量的知识点的一些见解
- 有关session的一些知识点
- 有关软件测试的一些知识点
- 【C++再学习】【05】有关类的一些知识点整理
- 有关网络协议融合、存储关键知识点的一些理解
- 有关const的一些事
- 关于const的一些知识点小结
- 【JSP开发】有关session的一些重要的知识点
- Java中,有关当前线程的一些知识点
- 有关mybatis的一些知识点
- 有关数据备份、存储全路径、备份设备的一些知识点(文件级备份、块备份)整理
- sqlserver数据库死锁(有关 NOLOCK 和 READPAST,rowlock的一些技术知识点)
- 有关oracle的一些知识点
- 有关mongodb升级的一些疑问
- 有关VISTA试用期的一些说明
- 有关C语言中的关键字const
- 与恒宝有关的一些常用知识
- Java 入门后需要学习的一些知识点
- 一些有关web.xml的错误的解决