【发布时间】:2023-04-11 03:06:02
【问题描述】:
编译器优化有时会跳过对某些没有结果的语句的评估。但是,这也适用于逗号运算符吗?
以下代码在ideone 上运行没有任何错误,但我预计它会崩溃。
#include <iostream>
int main() {
int x = (1/0, 2);
std::cout << x << std::endl;
}
如果我将语句更改为int x = 1/0;,程序确实会崩溃
【问题讨论】:
-
未定义 行为与保证崩溃不同。
-
很公平,但是如果左操作数不是UB怎么办?编译器可以跳过吗?
-
我相信正如 Alok 在答案中所解释的那样,即这取决于是否发生任何可观察到的事情。这是真的not only for the comma operator。 (顺便说一句,尽管我发表了评论,但我认为这是一个很好的问题,我对问题和答案都 +1 了。)