Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+;中的vector.size()与string.length()相乘时出现了意外的答案+;_C++_String_Vector_Casting - Fatal编程技术网

C++ C+;中的vector.size()与string.length()相乘时出现了意外的答案+;

C++ C+;中的vector.size()与string.length()相乘时出现了意外的答案+;,c++,string,vector,casting,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

考虑一下这个代码

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;

string::length和string::size以字节为单位,vector::size为无符号整数。为什么输出是这样的,18446744073709551615的含义是什么,
的数据类型是什么(A.length()-(B[0].length()*B.size())
,为什么整数转换给出了正确的答案?

size\u t严格用于存储显然不能为负的大小和长度。它本质上是无符号的,并且依赖于实现。 您的代码强制大小类型为负值,因此您会看到这个奇怪的数字

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

运行以下自解释代码: (这应该会给你同样的结果)

#包括
int main()
{
std::size\u t size=-1;

std::我可以肯定这个问题在SO有多个重复项。一个负数->一个无符号类型会导致一个很大的数字。小心你的数学。不要这样做。如果可能的话,在你需要减去数字时使用有符号类型。强制转换的结果是实现定义的行为。要定义良好,你可以当
int p=1
无符号q=-1
为什么
p
1
1
2
18446744073709551615
-1
#include <iostream>

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