为什么我不能使用constexpr全局变量来初始化constexpr引用类型?

Pra*_*een 4 c++ constexpr c++11

#include <iostream>
using namespace std;

constexpr int r =100;
int main()
{
    constexpr int &k = r ;
    cout << k << endl;
}
Run Code Online (Sandbox Code Playgroud)

编译此代码会在编译时将"error:binding'const int'引用为类型'int&'丢弃限定符".

max*_*x66 6

编译加入const之后int.

constexpr int const & k = r ;
// ...........^^^^^
Run Code Online (Sandbox Code Playgroud)

问题是constepxr暗示const,所以当你定义时r

constexpr int r =100;
Run Code Online (Sandbox Code Playgroud)

你定义constexpr为一个int const值(也考虑到const应用于左边的类型;只有在左边没有类型时才在右边;所以const int并且int const是相同的东西).

但是你的 k

constexpr int & k = r ;
Run Code Online (Sandbox Code Playgroud)

不是const(隐含的constexpr)引用,int const而是仅仅const引用int.

并且您无法int使用int const值初始化对变量的引用.

您可以通过解决错误k一个const一个参考int const.

  • @praveen它是对非const int的constexpr引用,至少有一定意义.你不能拥有constexpr非const值.作为示例,`template <int&x> struct foo {foo(){++ x;}};`是一种增加一些constexpr-located int的类型,但是int没有constexpr值.参考文献是constexpr; 价值不是. (2认同)