鉴于这个例子:
std::vector<int> numbers = {5,6,7}; //size is 3
int i = -1;
std::cout << i % 3 <<"\n"; // output: -1
std::cout << i % numbers.size() << "\n"; // output: 0
基本上,在这两个语句中,我都在处理-1 % 3,但编译器输出的数字不同。我不理解这个结果,希望有人能解释一下。
编辑:如@Chris、@Keith Thompson和@AnT所建议的代码段。
std::cout << std::numeric_limits<std::size_t>::max() % 3 <<"\n"; //output: 0
std::cout << i % numbers.size() << "\n"; // output: 0
打印出期望的输出。感谢每个人提供的有用建议!
-1
没有被转换成1
。它被转换成了SIZE_MAX
。 - Keith Thompsoni % numbers.size()
不是-1 % 3
。实际上它是(std::vector<int>::size_type) i % numbers.size()
。而(std::vector<int>::size_type) i
不再是-1
,而是一些大的无符号值。 - AnT stands with Russia