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编译。
- 为什么
sizeof
计算string的长度(需要的空间)? - string文字在给
sizeof
时是否有不同的types(来自char *或char [])?
-
sizeof("f")
必须返回2,一个用于'f',一个用于终止'\ 0'。 -
sizeof(foo)
在32位机器上返回4,在64位机器上返回8,因为foo是一个指针 -
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"
。
希望有所帮助。