代码之家  ›  专栏  ›  技术社区  ›  Pharap wonce

变量上的“const constexpr”是否多余?

  •  7
  • Pharap wonce  · 技术社区  · 8 年前

    cppreference 声明:

    用于对象声明或非静态的constexpr说明符 成员函数(直到C++ 14)意味着const。


    “对象声明”是指“任何变量声明”吗?

    即是

    constexpr const int someConstant = 3;
    

    相当于

    constexpr int someConstant = 3;
    

    在C++ 11中,C++ 14和C++ 17?

    2 回复  |  直到 8 年前
        1
  •  5
  •   Sergey Kalinichenko    8 年前

    在带有原语的声明中,例如示例中的声明, const 确实是多余的。但是,可能会有一些奇怪的情况 康斯特 是必需的,例如

    constexpr int someConstant = 3;
    constexpr const int *someConstantPointerToConstant = &someConstant;
    

    在这里, someConstantPointerToConstant 两者都是 constexpr (即在编译时已知,因此 常量表达式 )它也是一个指向常数的指针(即它的对象不能改变,因此 康斯特 )上面的第二个声明不能与 康斯特 省略( demo )

        2
  •  2
  •   Pharap wonce    8 年前

    const 是多余的 const constexpr 对于对象。

    “对象声明”是指“任何变量声明”吗?

    是的。

    按照 cppreference ,变量或常量是对象:

    变量是不是非静态数据的对象或引用 成员,这是通过声明介绍的。