簡體   English   中英

使用constexpr構造函數和函數(不同vc,g ++)的文字類編譯錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM