2016-12-28 13 views
3

我用克利翁作爲IDE,它報告在IDE作爲不同betwee {}和=當C++ 11初始化變量

字段z中的一個錯誤,必須初始化

它可以編譯並運行。但是如果我將const int z{3};更改爲const int z=3;,則IDE中不會報告任何錯誤。我的問題是這是否確實是我的代碼錯誤,或者它只是IDE中的一個錯誤?這兩種初始化方法有什麼區別?你的IDE報告了這個錯誤嗎?

#include <iostream> 
using namespace std; 

class Test 
{ 
private: 
    const int x = 3; 
    int y; 
    const int z{3}; 
public: 
    Test(int); 
    int gety(){ 
     return y; 
    } 
}; 

Test::Test(int a){ 
    y=x+4; 
} 

int main() 
{ 
    Test test(5); 
    std::cout << test.gety() << std::endl; 
    return 0; 
} 
+0

你在編譯時看到了這個嗎?如果是這樣,你使用的是哪種編譯器? –

+1

我在編譯期間沒有看到這個。代碼可以編譯並運行。它僅在IDE中報告。對於IDE,只需使用int'z {3}'或將其更改爲'const int z = 3',一些方法可以修復它,例如刪除const。如果您複製並將上述代碼複製到您的編譯器或IDE,您是否可以看到問題?這是一個真正的錯誤還是IDE錯誤? – drbombe

+0

您的代碼有效。 –

回答

6

是否確實是我的代碼

錯誤,就在代碼中沒有錯誤,這是確定。

或者它只是IDE中的一個錯誤?

這是一個錯誤消息產生的錯誤。 IDE在我的嫌疑犯名單中名列前茅,但它可能是IDE繼電器信息的另一個工具。

這兩種初始化方法有什麼不同?

在此上下文中(默認成員初始值設定項),兩種語法在語義上都是等價的。沒有區別。