2015-04-03 38 views
6

今天我不小心把const放在我的構造函數的開頭(複製粘貼錯誤)並編譯。我只在Visual Studio 2008中使用過C++ 11。這個語法是否有任何意義?這是微軟在constexpr的早期嘗試嗎?作爲一個const構造函數是否有這樣的事情?

class foo 
{ 
public: 
    const foo(int i){} 
}; 

foo f(1); 
+0

我不知道它在VC++ 08中有什麼影響,如果有的話。它可能會被忽略? – user2864740 2015-04-03 17:08:46

+0

我能夠在構造函數的主體中調用非const函數,所以如果它有效果,它不會限制構造函數中調用的內容。 – cppguy 2015-04-03 17:09:48

+1

@cppguy這並不奇怪,因爲ctor沒有被聲明爲'foo(int i)const'。我不知道後者是否在VS(具有可變成員變量)中工作,雖然ctors不能被cv限定:) – vsoftco 2015-04-03 17:12:20

回答

4

您的代碼不符合標準,不存在這種情況。但是,從C++ 11開始,您可以使用constexpr構造函數,因此您的對象在編譯時構建,並可以在constexpr表達式中進一步使用。

儘管我沒有使用它,但MSVS在標準遵從方面並不是最好的編譯器,至少這是我從本網站的各種問題中意識到的。

相關問題