考虑这段代码

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

最佳答案

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

正如您正确完成的那样,必须将结果强制转换为可以接受负值的数据类型。

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

#include <iostream>

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

关于c++ - 在C++中将vector.size()与string.length()相乘的意外答案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52397627/

10-16 23:44