【发布时间】:2021-12-27 17:37:18
【问题描述】:
我试图了解 C++ 中表达式的求值顺序。我有以下例子:
int i = 0;
std::cin >> i >> i; //IS THIS UB?
我的第一个问题是上面显示的 sn-p 会产生 UB 吗?
接下来,
int i = 0;
std::cin >> i >> ++i; //IS THIS UB?
我的第二个问题是,这个 sn-p 会产生 UB 吗?
【问题讨论】:
-
我真的很好奇
std::cin >> i >> ++i;的用例增加一个变量,然后立即覆盖该值。你为什么要这样做? -
我正在学习表达式的评估,所以只是想知道这是否会导致 UB。例如,我认为
std::cout << i << ++i;会导致 UB,但为什么不是std::cin >> i >> ++i;。 -
如果您只是在顺序无关紧要的地方编写代码,您实际上不必知道所有细节。并指定重要的顺序(使用单独的语句)。例如,我认为
std::cin >> i >> i;在技术上是可以的,但仍将其写为std::cin >> ignored >> i;以表明我真的只想要第二个值。 -
我的问题是你为什么要编写难以理解的代码。在任何专业环境中,您都会因这种糟糕的风格而受到指责,并让您更加明确地表达出来。
-
@BoP:
std::cin >> a[i] >> a[++i];怎么样。
标签: c++ undefined-behavior operator-precedence evaluation