我已经读过一些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而不是纯数组或堆分配数组是否重要?
答案 0 :(得分:3)
当您将相同的变量增加两次时会出现问题,例如:
foo(i++, i++);
在这种情况下,第二个是未定义的
使用operator []时,没有未定义的行为。
有关详细信息:Is it legal to use the increment operator in a C++ function call?
答案 1 :(得分:1)
使用前置或后置增量不会影响代码的有效性。
唯一重要的是结果索引在矢量或数组的范围内