当我遇到以下代码时,我正在调试一个程序,我错误地键入了类似于以下内容:
//Original (wrong)
std::string first("Hello");
std::string second = first + second;
//Instead of this (correct)
std::string first("Hello");
std::string second = first + something_else;
显然我并没有尝试这样做(我想不出为什么有人会想要这样做),但这让我思考。它看起来不像原来的应该工作,我认为它是未定义的。确实,这是我问题的根源。
为了使问题更普遍,请考虑以下几点:
SomeType a;
SomeType b = a + b;
行为未定义仅仅是因为b
尚未初始化(请参阅此答案)?
如果行为未定义,那么我真正的问题是,为什么?
这是否仅针对某些标准容器未定义,例如std::string
,还是在更一般的意义上未定义(STL 类、用户定义的类、POD、基本类型)?
标准的哪一部分适用于此?
如有必要,假设这是 c++11。