📜  “++i + ++i”解释——C++(1)

📅  最后修改于: 2023-12-03 14:48:44.108000             🧑  作者: Mango

“++i + ++i”解释——C++

在 C++ 中,++i 表示先将 i 的值加 1,再返回 i 的值。

因此,表达式 ++i + ++i 的结果会因编译器实现的不同而有所不同。在某些编译器中,它可能编译为未定义行为导致程序崩溃,而在另一些编译器中,则可能编译为具有定义的行为。

下面这段代码可以模拟不同编译器的实现:

#include <iostream>

int main()
{
    int i = 0;
    int a = ++i + ++i; // 在某些编译器中会导致未定义行为
    int b = i + ++i;   // 在所有编译器中都将产生具有定义的结果
    std::cout << a << std::endl;
    std::cout << b << std::endl;
}

在某些编译器中,执行 int a = ++i + ++i; 这行代码可能会导致程序崩溃。这是因为在表达式 ++i + ++i 中,两个 ++i 在计算之前并没有指定执行顺序。因此,编译器可能会选择任意一个 ++i 的值先加 1,然后再用这个值去加另外一个 ++i 的值。

例如,编译器可能会先将 i 的值加 1,再将其加上另一个 ++i 的值,这样结果就是 2。但是,它也可能先将另一个 ++i 的值加 1,然后再将其加上已经加 1 后的 i 值,这样结果就是 3

在所有编译器中,执行 int b = i + ++i; 这行代码都将产生具有定义的结果。这是因为在表达式 i + ++i 中,左侧的 i 已经被计算完毕,右侧的 ++i 只能使用 i 加了 1 后的值进行计算。

因此,在 C++ 中应该避免写出这种不确定行为的表达式,以保证程序的安全性和正确性。