2009-08-31 128 views
2

這個編譯:-)VS2008 C++編譯器錯誤?

string name; 
name = 1; 

這並不:

string name = 1; 

有什麼想法?

我知道這是錯誤的。 。 。那不是重點。第一個給笑臉。

回答

14

第一次編譯是因爲賦值運算符被稱爲「string & operator =(char c)」的一個簽名,編譯器可以將1轉換爲char。

第二個不會編譯,因爲它調用沒有兼容簽名的複製構造函數。

4

第二個例子是真正的初始化而非賦值,即它調用構造函數而不是operator=。顯然,類string沒有一個將整數作爲參數的構造函數,但它的賦值操作符對它是可以的。而你得到笑臉的原因是它是ASCII值爲1的字符。

順便說一下,這不是特定於Visual Studio。任何C++編譯器都應該以相同的方式運行。

1

與問題無關,但您爲什麼不(和其他人)發佈可編譯代碼。會:

#include <string> 
using namespace std; 

int main() { 
    string name; 
    name = 1; 
    string name2 = 1; 
} 

已經太多要問?鑑於此,我們可以看到「string」實際上是指std :: string而不是一些隨機類。

+0

我想如果包含沒有顯示,那麼它被認爲是標準。如果是隨機課程,那麼你必須展示它。此外,他很快得到了正確的答案,從而強化了行爲(對所有看到它的人)。我認爲這就是它成爲常態的原因。 –

+3

我同意這裏的很多代碼示例都不夠完整,但對於這樣簡單的事情來說更是不必要的。此外,這不應該是一個答案,而是一個評論。 – krdluzni

+2

對我來說,並不是猜測'string'是指什麼,但是我必須自己編寫一個可編輯的例子才能玩弄它。我非常感謝他們遞交了一個現成的例子,如果我有這個問題,我更有可能更加關注這個問題。 – sbi