2013-05-28 103 views
5

我發現了一些我不明白的東西。std :: string s()奇怪的行爲

std::string a(); 

打印出來時返回1。我不知道它來自哪裏。我認爲a()是一個沒有參數的構造函數,但它看起來不是。

我在哪裏可以找到關於這方面的信息?這是什麼?

,並試圖做std::string b(a);編譯時喊道:

error: no matching function for call to ‘std::basic_string<char>::basic_string(std::string (&)())’ 

解釋,將不勝感激。

+3

谷歌 「C++最棘手的解析」。 – Jon

+6

請參閱:http://en.wikipedia.org/wiki/Most_vexing_parse –

+4

人們,什麼是所有的downvotes?答案如此明顯,以至於你們所有人都會立即知道問題在何時?投票結束這個問題是一件很好的事情,但我們不要因爲不知道而對周圍的人進行打擊。 – Jon

回答

5

這是一個函數聲明,而不是一個字符串實例:

std::string a(); 

它聲明瞭一個名爲a,不帶參數的功能,並返回一個std:string。這些實例:

std::string a; // C++03 and C++11 
std::string b{}; // C++11 syntax 
3
std::string a(); 

聲明不帶參數的函數和std::string作爲返回類型。當您嘗試打印它時,您打印的地址是true

警告:地址「的std :: string一個()」將始終評估爲「真」 [-Waddress]