const对静态成员的引用

yiv*_*ivo 2 c++ static reference member c++11

struct Foo
{
    constexpr static int n = 10;
};

void f(const int &x) {}

int main()
{
    Foo foo;
    f(Foo::n);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到错误:main.cpp | 11 |未定义引用`Foo :: n'|.为什么?

MWi*_*Wid 5

标准需要编译器错误.既然你的功能

void f(const int& x)
Run Code Online (Sandbox Code Playgroud)

在调用中通过引用引用它

f(Foo::n);
Run Code Online (Sandbox Code Playgroud)

变量Foo::nodr-used.因此需要定义.

有两种解决方案.

1定义Foo::n:

struct Foo    
{   
    constexpr static int n = 10; // only a declaration    
};    

constexpr int Foo::n; // definition
Run Code Online (Sandbox Code Playgroud)

2 f取值的参数:

void f(int x);
Run Code Online (Sandbox Code Playgroud)