奇怪的std :: cout行爲我有一個方法返回一個字符串顯示爲錯誤消息。根據程序中發生此錯誤的位置,我可能會在顯示錯誤消息之前添加更多解釋。與const char *
string errorMessage() {
return "this is an error";
}
// somewhere in the program...
const char* message = ("Some extra info \n" + errorMessage()).c_str();
cout << message << endl;
(我存儲該消息作爲一個const char *因爲我將實際提供該誤差,其接受爲const char *參數的另一種方法)
在這一點上,輸出垃圾(不可打印的字符的安慰)。
所以我打了一下,發現如果不是我做的:
// somewhere in the program...
const char* message = ("Some extra info \n" + errorMessage()).c_str();
cout << ("Some extra info \n" + errorMessage()).c_str() << endl << message << endl;
則顯示消息正確的兩倍。
爲什麼提供cout
的額外參數會導致它按照我的意圖工作?
啊,這是有道理的
我建議這樣做,而不是。這是事實,它總是在一個案件中工作,而從來沒有在其他案件中真正投擲我 – rbennett485
@ rbennett485這樣的事情幾乎總是未定義的行爲或錯誤的宏觀。 :-) – Downvoter
當你說'這樣的事情'時,你的意思是一個程序,有時按預期工作,有時不會? – rbennett485