C++ constexpr构造函数和函数的文本类编译错误(不同于vc、g+;+;) #包括 #包括 使用名称空间std; 甲级{ 公众: constexpr A(){} constexpr int区域(){ 返回12; } 私人: //constexpr int h=3; //constexpr int w=4; }; int main() { constexpr A; constexpr int j=a.面积(); cout

C++ constexpr构造函数和函数的文本类编译错误(不同于vc、g+;+;) #包括 #包括 使用名称空间std; 甲级{ 公众: constexpr A(){} constexpr int区域(){ 返回12; } 私人: //constexpr int h=3; //constexpr int w=4; }; int main() { constexpr A; constexpr int j=a.面积(); cout,c++,compiler-errors,C++,Compiler Errors,问题是constepr对象意味着const,这意味着不能调用area,因为它是一个非常量函数。将area标记为const,就是这样 可选地,使 a < /Cord>非const将允许您保持区域< /代码>非const,这是奇数,它是有效C++()。 编辑。可能您使用的是C++14或更高版本。您对constexpr函数的印象意味着const是C++11的一项功能,在以后的标准中有所更改。“无法编译”-告诉我们完整的错误信息。编译器的哪些版本?C++的什么版本?@ JordZWink。对不起,现在我

问题是
constepr
对象意味着
const
,这意味着不能调用
area
,因为它是一个非常量函数。将
area
标记为
const
,就是这样

可选地,使<代码> a < /Cord>非const将允许您保持<代码>区域< /代码>非const,这是奇数,它是有效C++(

)。
编辑。可能您使用的是C++14或更高版本。您对
constexpr
函数的印象意味着
const
是C++11的一项功能,在以后的标准中有所更改。

“无法编译”-告诉我们完整的错误信息。编译器的哪些版本?C++的什么版本?@ JordZWink。对不起,现在我添加了一个关于错误的图片。你的文本图像。它不能被大声朗读或者复制到编辑器中,而且索引不很好,这意味着其他问题相同的用户在这里不太可能找到答案。请你的P。ost直接合并相关文本(最好使用复制+粘贴以避免转录错误)。@TobySpeight o_o.........文本(代码)两幅图像中的一幅与我从一开始就发布的代码完全相同。当然,但使用非常量会使构造函数etc在编译时无法运行。感觉就像这样。但是
constepr
memeber函数隐式地
const
@Rick不,它不是。
constepr int-area()const <代码>注意第二个<代码> const <代码>。是的,我正在阅读C++底漆,我想是C++ 11。但是我仍然不明白为什么我可以用G++编译这个代码,我认为我的代码是正确的。@瑞克在用G++编译时,使用命令<代码> -STD= C++ 11/代码>以C++ 11模式编译。
#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;

}