gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:53:00 25 4
gpt4 key购买 nike

#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

最佳答案

问题是 constexpr 对象隐含了 const,这意味着您不能调用 area,因为它是一个非常量函数。将 area 标记为 const 即可。

或者,使 a 非常量将允许您保持 area 非常量,这虽然奇怪,但它是有效的 C++。

编辑。也许您正在使用 C++14 或更高版本。您对 constexpr 函数暗示 const 的印象是 C++11 功能,在后来的标准中发生了变化。

关于c++ - 使用 constexpr 构造函数和函数的文字类编译错误(不同的 vc、g++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50146622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com