我在比较向量和简单常量的大小时遇到问题-1
我相信这两者在逻辑上是相同的:
(index >= (arr.size() - 1))((index + 1) >= arr.size())但是,第一个返回1not 0。两者比较有什么区别?
#include <iostream>
#include <vector>
using namespace std;
int main() {
int index = -1;
vector<char> arr(6);
cout << (index >= (arr.size() - 1)) << endl;
cout << ((index + 1) >= arr.size()) << endl;
}
Run Code Online (Sandbox Code Playgroud)
dbu*_*ush 18
该arr.size方法返回无符号整数类型,因此比较右侧的类型是无符号的。这会导致左侧被转换为无符号。
当左边的值为 -1 时,它会转换为一个非常大的无符号数,导致第一个比较为 true。在第二种情况下,左边的值为 0,因此在转换为无符号类型时不会改变,并且比较结果为 false。
如果您使用-Wall -Wextra它进行编译,则会警告您有关有符号/无符号比较的信息。