为什么即使内容更改,字符串变量的 sizeof() 也始终返回相同的数字?

vor*_*row 0 c++ sizeof

这是一个相当简单的问题,但非常令人困惑。

string R = "hhhh" ;
cout<< sizeof( R )<<endl;
Run Code Online (Sandbox Code Playgroud)

输出:

4
Run Code Online (Sandbox Code Playgroud)

变化:

字符串 R = "hhuuuuuuhh" ; cout<< sizeof( R )<

输出 2:

4
Run Code Online (Sandbox Code Playgroud)

出了什么问题?我应该改用 char 数组吗?

Bat*_*eba 5

想想sizeof编译时评估。它评估类型的大小,而不是内容的大小。你甚至可以写sizeof(std::string),这将是完全相同的同sizeof(foo)任何std::string 实例 foo

要计算 a 中的字符数std::string,请使用size()

如果你有一个字符数组,说char c[6]那么类型c是一个数组的6char秒。因此sizeof(c)(在编译时已知)将是 6,因为 C++ 标准单个的大小定义char为 1。