考虑此代码
string A("a");
vector<string>B={"a","a"};
cout<<A.length()<<endl;;
cout<<B[0].length()<<endl;;
cout<<B.size()<<endl;
cout<<(A.length()-(B[0].length()*B.size()))<<endl;
cout<<(int)(A.length()-(B[0].length()*B.size()))<<endl;
以上代码的输出为
1
1
2
18446744073709551615
-1
string :: length和string :: size为字节,而vector :: size为无符号整数。为什么会有这样的输出?18446744073709551615
的含义是什么?(A.length()-(B[0].length()*B.size()))
的数据类型是什么?为什么整数转换可以给出正确的答案?
答案 0 :(得分:2)
size_t严格用于存储显然不能为负的大小和长度。它本质上是无符号的,取决于实现。 您的代码将一个负值强制为size_t类型,因此您看到了这个奇怪的数字。
您已正确完成操作,结果必须转换为可以接受负值的数据类型。
运行以下自我说明代码: (这应该给您相同的结果)
#include <iostream>
int main()
{
std::size_t size = -1;
std::cout << size;
}