C++之const限定符

-
-
2026-02-13 08:36
本文内容为《C++ Primer(第五版)》相关章节整理而得。
  • 默认情况下,const对象仅在同一个文件中有效,它在编译器编译期间由编译器进行替换。若想要在文件间共享,则需要在声明和定义中都添加extern,如下:
    extern const int nBufSize = 1024; /// 定义
    extern const int nBufSize; /// 声明
  • 指向常量的指针不能用于改变其所指对象的值。

    const double pi = 3.14;
    const double* pPi = π /// 正确
    *pPi = 52.0; /// 错误
  • 常量指针必须初始化(如下,pPi就是一个常量指针)。

    const double pi = 3.14;
    const double* const pPi = π
    • 指针本身是常量不意味着不能通过该指针去修改所指向对象的值,具体能不能修改要看被指向对象本身。
  • 顶层const与底层const

    指针本身是一个对象,所指向的也是一个对象。顶层const表示指针本身是常量,底层const则表示指针指向的是一个常量。

  • constexpr变量

    C++11新标准规定,允许将变量声明为constexpr类型,声明为该类型的变量一定是一个常量,必须用常量表达式初始化。

    constexpr int sz = size(); /// 这种情况下只有当size函数也是constexpr函数才是正确声明

    要了解constexpr函数,需要先了解字面值类型:

    • 常量表达式的值需要在编译时就得到计算,因为这些类型一般较为简单,值也显而易见、容易得到,就把它们称为“字面值类型”。

    constexpr函数:

    • 指能用于常量表达式的函数,其定义与普通函数类似,但需要注意:函数的返回类型及所有形参的类型都得是字面值类型,且函数体重必须且只有一条return语句。
  • 在constexpr声明中如果定义了一个指针,限定符constexpr仅对指针有效。


清遥
遥夜泛清瑟,西风生翠萝。
微博热搜榜Top10

加载中...
最新评论

加载中...