奇怪的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