【问题标题】:When I run this code, result is always 24 regardless of what string is. Why? [duplicate]当我运行此代码时,无论字符串是什么,结果始终为 24。为什么? [复制]
【发布时间】:2021-09-07 14:39:52
【问题描述】:

当我运行这段代码时,无论字符串是什么,结果总是 24。为什么?

#include <bits/stdc++.h>
using namespace std;
    
int main()
{
    string s = "asdccccc";
    cout << sizeof(s);
    return 0;
}

【问题讨论】:

  • 要获取字符串的大小,请使用cout &lt;&lt; s.size();(或cout &lt;&lt; s.length(); ...它们是同义词)。当您执行sizeof(s) 时,您获取的不是字符串有效负载的大小,而是拥有有效负载的字符串对象的大小。
  • @Caleth 我应该知道这是重复的,谢谢。
  • 如果你使用#include &lt;string&gt;,你的编译效率会更高,这是一个单一的包含文件版本,不标准的庞然大物bits/stdc++.h。通常,只在代码或标头中包含实际解析符号的标头。

标签: c++ string


【解决方案1】:

string 是一个对象。通过使用sizeof,您将获得该对象的成员 的大小。其中一个成员可能是指向实际字符串内容的指针,但无论指针指向什么,指针的大小都是恒定的。

【讨论】:

  • 我尝试在其他编译器上运行它...答案不是 24 但它仍然是一个常数,无论字符串的大小如何...所以指针的大小会随着编译器的变化而变化? ?
  • @ChiragJoshi std::string 类的定义随着标准库的实现而改变。指针的大小在编译器之间不会改变,但会在不同的 CPU 架构之间发生变化(并且 x86 支持具有不同大小指针的多种模式)。
  • @ChiragJoshi 它可能是指针的大小,特别是如果一个是 32 位而另一个是 64 位。也可以是其他成员的数量和类型。
【解决方案2】:

考虑这个简单的例子

class string
{
    const char* _ptr;
    ....
    ....
public:
   
}

当你写sizeof(string)时,你会得到类的大小,而不是_ptr指向的字符串字面量的大小。

【讨论】:

    猜你喜欢
    • 2016-03-20
    • 2013-05-04
    • 1970-01-01
    • 2014-07-12
    • 2014-04-08
    • 1970-01-01
    • 2013-01-03
    • 2020-08-23
    • 2020-11-16
    相关资源
    最近更新 更多