代码之家  ›  专栏  ›  技术社区  ›  Rick Jim DeLaHunt

constexpr构造函数和函数的文本类编译错误(与vc、g++不同)

  •  2
  • Rick Jim DeLaHunt  · 技术社区  · 6 年前
    #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++之间的差异结果有时令人困惑。顺便说一句,我应该依赖哪个编译器?

    enter image description here enter image description here

    1 回复  |  直到 6 年前
        1
  •  4
  •   DeiDei    6 年前

    问题是 constexpr 对象暗示 const ,这意味着您无法拨打 area 因为它是一个非常量函数。做记号 地区 常量 就这样。

    或者,制作 a 非常量将允许您保留 地区 非常量,虽然很奇怪,但它是有效的C++。

    编辑 。可能您使用的是C++14或更高版本。你的印象是 常量表达式 函数暗示 常量 是一种C++11功能,在以后的标准中进行了更改。