【发布时间】:2015-06-03 15:14:11
【问题描述】:
我遇到了一个我不明白的情况。有人会很好地解释为什么第一个代码编译正确,而第二个代码出错:
错误:'TestClass::z' 的值在常量表达式中不可用
static constexpr int sum() {返回 x+y+z;}
-------------------------------------------------- --^
注意:'int TestClass::z' 不是 const 静态 int z;"
工作代码:
#include <iostream>
using namespace std;
class TestClass
{
public:
constexpr int sum() {return x+y+z;}
private:
static constexpr int x = 2;
static const int y = 3;
int z = 5;
};
int main()
{
TestClass tc;
cout << tc.sum() << endl;
return 0;
}
但是当我尝试将 TestClass::sum() 设为静态时,我得到了上述错误:
#include <iostream>
using namespace std;
class TestClass
{
public:
static constexpr int sum() {return x+y+z;}
private:
static constexpr int x = 2;
static const int y = 3;
static int z;
};
int TestClass::z = 5;
int main()
{
TestClass tc;
cout << tc.sum() << endl;
return 0;
}
附:我正在使用 mingw32-g++ 4.8.1
【问题讨论】:
-
constexpr成员函数是 even allowed to change data members 如果相信 Clang。
标签: c++ class static constexpr