在C ++中将vector.size()与string.length()相乘的意外答案

时间:2018-09-19 03:34:21

标签: c++ string vector casting

考虑此代码

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()))的数据类型是什么?为什么整数转换可以给出正确的答案?

1 个答案:

答案 0 :(得分:2)

size_t严格用于存储显然不能为负的大小和长度。它本质上是无符号的,取决于实现。 您的代码将一个负值强制为size_t类型,因此您看到了这个奇怪的数字。

您已正确完成操作,结果必须转换为可以接受负值的数据类型。

运行以下自我说明代码: (这应该给您相同的结果)

#include <iostream>

int main()
{
    std::size_t size = -1;
    std::cout << size; 
}