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
      和终止字符 努尔
    • foo
      是一个指针(编辑:不考虑限定符),指针在您的系统上似乎有4个字节长
    • 对于
      而言,其大小写与
      “f”
      相同
    希望有帮助

  • sizeof(“f”)
    必须返回2,一个用于“f”,一个用于终止“\0”
  • sizeof(foo)
    在32位机器上返回4,在64位机器上返回8,因为foo是指针
  • sizeof(bar)
    返回2,因为bar是由两个字符组成的数组,即“b”和终止的“\0”
  • 字符串文字具有类型“大小为N的数组,其大小为
    const char
    ”,其中N包括终端null


    请记住,数组在传递到
    sizeof

    时不会衰减为指针,但为什么
    char[]
    与string literal相同?我不是C++ C++专家,但我认为代码> char [/c>和 char */COD>是可交换的。+ 1在一般的答案(和速度:)两个精度:FO是一个指针(基本上限定符不适用),在C++中,类型总是“n conchar数组”(常量不是可选的)@ Dr.BeaSeas:你是,常量始终适用@Matthew:char*和char[]只有在某些情况下是相同的,sizeof运算符不是其中之一。@Matthew:Nope,数组和指针不能互换。只要需要指针,就可以传递数组,因为它会衰减为指针。但只要类型是数组,它就与指针不同。+1,但类型实际上是“N个常量字符的数组”(常量不是可选的)@dribeas:yes;我忽略了资格赛,但你学究般的正确。@JonathanLeffler。。。最好的一种正确,尤其是在编程方面。事实上,关于
    const
    的注释出现在回答几分钟后,让我脸上露出笑容。例如,如果记忆有用,根据C标准,它不能保证是4或8。但是精神是正确的-它将是
    sizeof(const char*)
    ,不管指针大小如何,当然与字符串的实际长度无关。在某些平台/体系结构/某些编译器中(历史上),指针大小和布局会根据类型而改变。例如,这就是为什么在变量函数调用中必须显式地将指针强制转换为其预期类型(如果它们不同的话),因为强制转换可以完全更改指针值。
    sizeof(string literal) = 2
    sizeof(const char* const) = 4
    sizeof(const char[]) = 2