i + 1 <vec.size()和i <vec.size()-1之间的差异

Ary*_*kla 6 c++ size runtime-error

进行编程时,我发现我的代码在使用条件时给出了运行时错误,i < vec.size() - 1但是对于来说可以正常工作i + 1< vec.size()。这里vec空无一人std::vector

//giving error
vector<int> vec;
for (int i = 0; i < vec.size() - 1; i++)
{
    //some code
}
//not giving error
vector<int> vec;
for (int i = 0; i + 1 < vec.size(); i++)
{
    //some code
}
Run Code Online (Sandbox Code Playgroud)

Cor*_*mer 13

该方法std::vector::size返回一个std::size_t无符号的。所以,如果它是空的,你会得到0 - 1,但表示为一个无符号数,将下溢,成为18446744073709551615根据

  • 请注意,它不是字面上的“ 0-1”,而是“ 0u-1”,“ 0ul-1”或“ 0ull-1”(取决于实现)。 (3认同)
  • @StackDanny这个站点需要一种将表达式标记为纯数学的方法,以消除编程语言表达的歧义:) (2认同)
  • 注意,无论“二进制补码”是什么,都不会影响std :: size_t(0)-1的结果,因为无符号类型没有符号表示。标准指定结果等于最大可表示值+ 1(或2 **位)的模。-1与X-1模X一致。 (2认同)