我想知道无论输入的长度如何,sizeof函数如何返回8
int main(){
string input;
getline(cin,input);
cout << "size of input is " << sizeof(input) << endl; //I am guessing
//it returns the size of a pointer because my OS is 64 bits.
return 0;
}
所以我的问题是隐式转换发生在哪里?这是 getline 的声明,
istream& getline ( istream& is, string& str );
此外,这种转换总是会发生,即无论指针类型如何,是否有一般情况呢?谢谢。
答案 0 :(得分:13)
sizeof
为您提供字节大小。 std::string
包含指向实际数据的指针。无论指针的大小如何,单个指针的大小都保持不变。这与其他因素相结合,使您的总大小为8。
您正在寻找std::string::size
或std::string::length
字符串的实际长度。如果您正在寻找一个函数来检索任何以null结尾的C-String的大小,请使用strlen()
。
答案 1 :(得分:3)
这里没有完成转换,只是sizeof
将返回对象的实际字节大小。显然,std :: string使用堆分配的内存来存储其实际内容,因此您无法确切地知道特定字符串总共使用了多少字节