C++ 字符串文字的大小
下面的代码C++ 字符串文字的大小,c++,string,sizeof,C++,String,Sizeof,下面的代码 #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 ch
#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;
}
在32位操作系统上,使用GCC编译
sizeof
计算字符串文字的长度(所需的空间)sizeof
时,字符串文字是否具有不同的类型(从char*或char[])sizeof
返回其操作数的大小(以字节为单位)。这应该回答了问题1此外,当传递到sizeof
时,字符串文字的类型为“array to n const char”
您的测试用例,一个接一个:
是由 两个字符,字符“f”
和终止字符 努尔f
是一个指针(编辑:不考虑限定符),指针在您的系统上似乎有4个字节长foo
- 对于
而言,其大小写与条
相同“f”
sizeof(“f”)
必须返回2,一个用于“f”,一个用于终止“\0”sizeof(foo)
在32位机器上返回4,在64位机器上返回8,因为foo是指针sizeof(bar)
返回2,因为bar是由两个字符组成的数组,即“b”和终止的“\0”const char
”,其中N包括终端null
请记住,数组在传递到
sizeof
时不会衰减为指针,但为什么char[]
与string literal相同?我不是C++ C++专家,但我认为代码> char [/c>和const
的注释出现在回答几分钟后,让我脸上露出笑容。例如,如果记忆有用,根据C标准,它不能保证是4或8。但是精神是正确的-它将是sizeof(const char*)
,不管指针大小如何,当然与字符串的实际长度无关。在某些平台/体系结构/某些编译器中(历史上),指针大小和布局会根据类型而改变。例如,这就是为什么在变量函数调用中必须显式地将指针强制转换为其预期类型(如果它们不同的话),因为强制转换可以完全更改指针值。
sizeof(string literal) = 2
sizeof(const char* const) = 4
sizeof(const char[]) = 2