C++17 后增量操作

Cod*_*ity 1 c++ c++17

C++17

有人可以解释一下如何

int number{5};
number = (number++) + 10;
Run Code Online (Sandbox Code Playgroud)

给出 15 的输出,而

int number {5};
number = (++number) + 10;
Run Code Online (Sandbox Code Playgroud)

给出 16 的输出?

Lig*_*ica 9

在采用P0145之前(在 C++17 中),第一个示例具有未定义的行为。什么事情都可能发生。

在 C++11 之前,两者都有未定义的行为。

在 C++17 中,两者都没有 undefined behavior。这并不意味着它是您想要编写的代码。

如果我们了解postfix 和 prefix increment 之间的区别,那么对您的输出的解释很简单:

情况1

  • number++:number变为 6 但表达式的计算结果为 5
  • 将十添加到表达式中
  • 结果 (15) 存储在 number

案例二

  • ++number:number变为 6 并且表达式的计算结果为 6
  • 将十添加到表达式中
  • 结果 (16) 存储在 number