c++参数评估顺序分配?

标签 c++

<分区>

在c++中,参数求值的顺序是不保证的,但是赋值表达式的左/右子表达式的顺序是保证的吗?例如

#include <iostream>
#include <map>

int main()
{
    int i = 2;
    std::map<int, int> map;
    map[i++] = i--;
    return 0;
}

左表达式i++是否保证在右表达式i--之前执行?

最佳答案

你问:

Is left expression i++ guaranteed to be executed before right expression i--?

不,不是。

线

map[i++] = i--;

最终可能成为

map[2] = 3;

map[1] = 2;

取决于首先计算赋值运算符的哪一侧。

但是,由于该行调用了未定义的行为,所以它也可能像@juanchopanza 的评论中指出的那样:

map[42] = -999;

关于c++参数评估顺序分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27803538/

相关文章:

C++11:正确的 std::array 初始化?

c++ - 在析构函数中发出 sigc++ 信号是否安全?

c++ - 来自同一个父类的另一个子类中的返回函数不返回任何内容

c++ - 带有模板参数的函数的编译问题

c++ - qwebengineview qt5.9如何提取数据

c++ - 编写 STL 兼容的迭代器

C++ 函数参数或参数数组

c++ - 使用 C++ 模板时对复制构造函数的 undefined reference

C++ — 使用 getch() 的箭头键按下检测莫名其妙地打印了一些单词

c++ - boost 信号槽泛化