这段代码有什么问题?这道题的答案应该是24吧?

What is wrong with this code? The answer should be 24 for this question right?

这段代码有什么问题?这道题的答案应该是24吧?

int t; 
vector<int>arr={24,434};

for(int i=arr.size()-1;i>=(arr.size()-2);i--)
{

        t=i;
}

cout<<arr[t];

你的循环永远不会结束。因为无符号整数永远不可能是 -1。

相反,试试这个聪明的方法:

#include <iostream>
#include <vector>


int main( )
{
    std::vector<int> arr { 24, 434 };
    std::size_t t { };

    for ( std::size_t idx { arr.size( ) }; idx--; )
    {
            t = idx;
    }

    std::cout << arr[ t ];
}

输出:

24

如你所见,循环头没有更新部分,条件部分也执行递减的任务。

这个循环

for(int i=arr.size()-1;i>=(arr.size()-2);i--)

是一个无限循环。

当 i 等于 0 时,由于循环的第三个表达式,它会递减并等于 -1。

然后在这种情况下

i>=(arr.size()-2)

因为操作数 arr.size()-2 的无符号整数类型的等级不低于 int 类型对象的等级,那么由于通常的算术转换,表达式 i 被转换为无符号整数类型对应表达式的类型arr.size()-2,由于提升了位符号,变成了一个很大的值

就是这个表达式

i>=(arr.size()-2)

左操作数不能为负值

其实就是这个循环

for(int i=arr.size()-1;i>=(arr.size()-2);i--)

没有意义,因为在任何情况下都不能超过一次迭代。