现在的位置: 首页 > 综合 > 正文

有关const的一些知识点

2018年02月23日 ⁄ 综合 ⁄ 共 820字 ⁄ 字号 评论关闭
  • 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;   //正确,允许一个指向常量的指针指向非常量对象。
  • 常量指针(必须初始化,一旦初始化完成,存放在指针中的地址就不能改变了):
  • 顶层const:指针本身是个常量。
  • 底层const:指针所指对象是个常量。

抱歉!评论已关闭.