c++ 为什么在这些情况下字符串的大小不同?[副本]

h79rfbju  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(128)

此问题已在此处有答案

Why is sizeof(string) == 32?(6个回答)
Why is sizeof(std::string) only eight bytes?(2个答案)
8天前关闭

#include <iostream>
using namespace std;
int main()
{
    string str = "abcdefghijklmnopqrstuvwy";
    cout << sizeof str << endl;
    cout<< sizeof "abcdefghijklmnopqrstuvwy"<<endl;
}

输出:

24
25

为什么字符串的大小不同,而字符数相同?

vnzz0bqm

vnzz0bqm1#

因为在第一个字符串的情况下,它被分配给,因此转换为,std::string或C++字符串,这是一个固定大小的对象,存储了对幕后字符串分配的引用。在您的实现中,sizeof任意std::string恰好是24。
但是当你只写sizeof "abcdefghijklmnopqrstuvwy"本身时,字符串被解释为C字符串或char[25],它包括24个可见字符和一个名为null结束符的空字符。
有关详细信息,请参阅Difference between string and char[] types in C++和链接的重复项。

相关问题