【发布时间】:2023-02-13 20:49:12
【问题描述】:
我写了以下代码:
int main() {
int b=0;
vector<int> v(5,-1);
v[b]=b++;
cout<<b<<"\n";
cout<<v[b]<<"\n";
}
输出如下:
1
-1 0 -1 -1 -1
我知道在下面的代码中 v[1] 变为 0 但我不明白为什么 v[0] 不变为 0,它与代码执行流程有关吗?
【问题讨论】:
-
像这样使用增量运算符会导致未定义的行为。更多关于here。结果可能因编译器而异,因为不存在以这种方式使用递增的明确规则。
-
en.cppreference.com/w/cpp/language/eval_order:4)内置后递增和后递减运算符的值计算在其副作用之前排序。
-
@BRemmelzwaal 我认为在这种情况下是另外一回事。这段代码中没有多个 ++ 和 -- 。
-
您的代码没有 for 循环,因此无法产生“如下输出”。
-
v[b]=b++;分配给向量的 1 个元素。如果你理解它分配给v[1],为什么要修改第二个元素?
标签: c++ algorithm data-structures