c++ - 为什么我的程序会跳过 while 循环? 2 大于 -1

标签 c++ visual-studio-2017

<分区>

在测试程序中,v的大小为2,由于2大于-1,我觉得应该进入while循环,然后“!”应该无限打印。但是,while 循环被跳过了。这是为什么?我在 VS 2017 和 Ideone 中测试了代码。

#include <iostream>
#include <vector>
int main(){
    std::vector<std::pair<int,float>> v = {{1,2.0},{2,2.0}};
    std::cout << v.size();
    while(v.size() > -1){
        std::cout << "!";
    }
}

最佳答案

当比较无符号类型的std::vector::size_type和有符号类型的int时,int被转换为 std::vector::size_type-1 变成一个非常大的无符号整数,大于 vector 的大小。因此 while 条件的计算结果为 false 并且 while 主体被跳过。如果你打开 compiler warnings ,你会得到类似的东西:

<source>:6:20: error: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, float> >::size_type' {aka 'long unsigned int'} and 'int' [-Werror=sign-compare]

    6 |     while(v.size() > -1){

      | 

关于c++ - 为什么我的程序会跳过 while 循环? 2 大于 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57775122/

相关文章:

c++ - Robert Sedgewick 的 C++ 算法经验

c++ - udp 服务器向特定客户端发送数据,直到收到任何 recvfrom

c++ - VS 2008 C++ 对象数组

c# - 发布 asp .net web 项目后项目的 dll 丢失

git - 在 visual studio 团队资源管理器中的 pull 请求中找不到任何项目

c++ - cin N 个元素到 vector C++

c++ - BN_CTX_free() 与 BN_CTX_end() EXC_BAD_ACCESS 异常

node.js - 如何将 gulp 设置为在 Visual Studio 2017 和 msbuild 中以相同方式运行,而无需更改我的构建脚本?

添加到 ASP.NET Core 元素中的 site.css 文件时,CSS 不起作用。但在添加为内联时有效

debugging - 无法在 VS2017 中调试 T4 模板