#include <iostream>
#include <string>
using namespace std;
class A {
public:
constexpr A() {}
constexpr int area() {
return 12;
}
private:
// constexpr int h = 3;
// constexpr int w = 4;
};
int main()
{
constexpr A a;
constexpr int j = a.area();
cout << j << endl;
}
为什么上面的代码在使用g ++时无法使用MSVC编译器进行编译? MSVC不是和其他编译器一样严格吗? MSVC和g ++之间的差异结果有时令人困惑。我应该依赖哪个编译器,任何提示btw?
答案 0 :(得分:4)
问题是constexpr
对象意味着const
,这意味着您无法调用area
,因为它是非const函数。将area
标记为const
即可。
或者,使a
非const将允许您保持area
非const,而奇数,它是有效的C ++。
修改即可。也许你正在使用C ++ 14或更高版本。您对constexpr
函数暗示const
的印象是C ++ 11功能,该功能在以后的标准中已更改。