【发布时间】:2011-12-04 19:44:56
【问题描述】:
在使用 C++ 代码时,我曾多次看到以下类型错误:
QString str = str.toUpper();
这可能是一个相当容易犯的错误,但它可以编译和执行(有时会崩溃,有时不会)。我看不出在任何情况下这会是你真正想做的事情。
一些测试表明,复制构造函数被调用,而不是默认的,并且对象是从复制构造函数中获得的。
谁能解释为什么这不是编译器错误,甚至不是警告?
【问题讨论】:
-
这被指定为未定义的行为(不需要诊断),可能是因为此类代码的一个或多个实例的诊断过于复杂。
-
可能是因为编译器不知道 toUpper() 返回相同的实例?我可以想象编译器编写者很难检查这一点。
-
@MarkB:这是已定义的行为,请参阅我的回答。
标签: c++ construction