2

我想知道无论我输入的长度如何,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 );

此外,这种转换总是会发生,即从任何类型到指针类型,是否存在一般情况?谢谢你。

4

2 回答 2

13

sizeof给你以字节为单位的大小。std::string包含指向实际数据的指针。无论它指向什么大小,单个指针的大小都保持不变。再加上其他因素,您的总尺寸为 8。

您正在寻找std::string::size或寻找std::string::length字符串的实际长度。如果您正在寻找一个函数来检索任何以 null 结尾的 C-String 的大小,请使用strlen().

于 2012-05-25T23:29:05.460 回答
3

这里没有进行转换,它只是sizeof返回对象的实际字节大小。显然 std::string 使用堆分配的内存来存储其实际内容,因此您无法确切知道特定字符串总共使用了多少字节

于 2012-05-25T23:28:22.670 回答