使用constexpr构造函数和函数的文字类编译错误(不同的vc,g ++)

时间:2018-05-03 03:45:51

标签: c++ compiler-errors

#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?

enter image description here enter image description here

1 个答案:

答案 0 :(得分:4)

问题是constexpr对象意味着const,这意味着您无法调用area,因为它是非const函数。将area标记为const即可。

或者,使a非const将允许您保持area非const,而奇数,它是有效的C ++。

修改即可。也许你正在使用C ++ 14或更高版本。您对constexpr函数暗示const的印象是C ++ 11功能,该功能在以后的标准中已更改。