【发布时间】:2019-09-09 06:26:04
【问题描述】:
对this 回复的评论指出,不应使用以下代码,因为它表现出未定义的行为:
int old = (std::cin >> old, old);
here 的类似代码也遭到了极大的蔑视,尤其是因为它表现出未定义的行为。
另一方面,this 高度赞成的回复建议以下代码作为逗号运算符有用性的示例:
while (cin >> str, str != "STOP") {
//process str
}
我假设如果这段代码表现出未定义的行为,它就不会被投票。
问题:如果第一个代码是未定义的行为(可能是因为使用从cin读取的结果而没有检查后者的状态),那么为什么第二个代码可以?
编辑:第一个例子的评论部分回答了这个问题。第二个示例没有显示str 是std::string 的一个实例,因此被初始化。因此,没有未定义的行为。
【问题讨论】:
-
@6502 好像已经在其他问题的评论区回答了你?
-
这也很大程度上取决于用于构建应用程序的 C++ 标准。参见例如this old question.
-
很多关于这个问题的神话突然出现 - 是的,在某处可能有一个很好的重复,但我认为值得提交一个简短的“总结”答案。
-
您链接的第一个问题没有答案,因此没有理由声称代码具有未定义的行为。评论不能作为答案。