考虑这段代码
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/