2016-12-08 25 views
0

我不小心鍵入了下面的代碼,但我的代碼成功構建,甚至正常運行。表達式結果未使用:C++編譯器的奇怪行爲?

std::string myString = "This is my string "; 
std::shared_ptr<std::string> s = std::make_shared<std::string>(myString); 
p->pushString(s);」accidental typo」; 

它只是顯示了一個警告Expression result unused

爲什麼它不是編譯器或運行時錯誤?

我使用Xcode的編輯器

感謝

回答

0

你知道,你可以有任意表達式作爲語句?這就是簡單的函數調用的作用或分配。其實這句話

p->pushString(s); 

其實就是這樣一個表達式語句。 p->pushString(s)部分是一個表達式,它是將它變成語句的上下文(帶有終止分號)。

這也意味着你可以在你的情況

"some string here"; 

這些都是有效的語句做類似

5; 

或者。但是,它們會產生一個結果,該結果會被(合法)丟棄或忽略,但可能會導致編譯器發出關於忽略結果的警告。

這實際上沒有什麼不同。

some_function_which_returns_a_result(); // Result ignored 
0

爲什麼它不是一個編譯器[...]錯誤?

因爲它沒有違反C++標準的任何規則。如果一個程序符合標準,那麼編譯器應該允許編譯。然而,它很友好,足以警告你表達無用。

或運行時錯誤?

該表達式不會導致任何執行的代碼,所以如果它導致運行時錯誤將是相當令人驚訝的。