string文字的大小

下面的代码

#include <iostream> using namespace std; int main() { const char* const foo = "f"; const char bar[] = "b"; cout << "sizeof(string literal) = " << sizeof( "f" ) << endl; cout << "sizeof(const char* const) = " << sizeof( foo ) << endl; cout << "sizeof(const char[]) = " << sizeof( bar ) << endl; } 

输出

 sizeof(string literal) = 2 sizeof(const char* const) = 4 sizeof(const char[]) = 2 

在一个32位的操作系统,用GCC编译。

  1. 为什么sizeof计算string的长度(需要的空间)?
  2. string文字在给sizeof时是否有不同的types(来自char *或char [])?
  1. sizeof("f")必须返回2,一个用于'f',一个用于终止'\ 0'。
  2. sizeof(foo)在32位机器上返回4,在64位机器上返回8,因为foo是一个指针
  3. sizeof(bar)返回2,因为bar是由两个字符组成的数组,即'b'和终止'\ 0'。

string文字具有'字符大小为N的数组',其中N包括terminalnull。

请记住,传递给sizeof时,数组不会衰减到指针。

sizeof返回操作数的大小(以字节为单位)。 这应该回答问题1;;)此外,一个string文字的types是“数组到n常量字符”传递给sizeof

你的testing用例,一个接一个:

  • "f"是由两个字符组成的string文字,字符f和终止NULL。
  • foo是一个指针(编辑:无论限定符),指针似乎是在您的系统上4个字节长。
  • 对于bar的情况是一样的"f"

希望有所帮助。