是否使用C ++中的后递增变量未定义行为来访问数组的元素?

时间:2016-11-25 14:50:51

标签: c++ vector undefined-behavior post-increment

我已经读过一些stackoverflow问题,在函数调用中发布或预先递增变量会导致未定义的行为。

因为在向量中,数组元素访问运算符operator[]()是函数调用,对于以下代码示例是否相同?

double p_step = 1.0 / (double)_progress_bar_chars.size();
int ixx = 0;
for(double p = 0.0; p < 1.0; p += p_step)
    _progress_bar_chars[ixx ++] = (p <= progress ? '=' : ' ');

上述代码是否会产生未定义的行为?

供参考:

std::vector<char> _progress_bar_chars;
_progress_bar_chars.resize(50);
double progress = 0.5;

最后,我在这里使用std :: vector而不是纯数组或堆分配数组是否重要?

2 个答案:

答案 0 :(得分:3)

当您将相同的变量增加两次时会出现问题,例如:

foo(i++, i++);

在这种情况下,第二个是未定义的

使用operator []时,没有未定义的行为。

有关详细信息:Is it legal to use the increment operator in a C++ function call?

答案 1 :(得分:1)

使用前置或后置增量不会影响代码的有效性。

唯一重要的是结果索引在矢量或数组的范围内