[英]literal class compile error with constexpr constructor and function (differ vc, g++)
#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 ++之間的差異結果有時會令人困惑。 還有什么提示,我應該依靠哪個編譯器?
問題在於constexpr
對象隱含const
,這意味着您不能調用area
因為它是非const函數。 將area
標記為const
就是這樣。
另外,制作a
非常量將使您可以保持area
非常量,盡管這很奇怪,但它是有效的C ++。
編輯 。 也許您使用的是C ++ 14或更高版本。 您對constexpr
函數隱含const
印象是C ++ 11功能,該功能在以后的標准中已更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.