当我运行此代码时,无论字符串是啥,结果始终为 24。为啥? [复制]
Posted
技术标签:
【中文标题】当我运行此代码时,无论字符串是啥,结果始终为 24。为啥? [复制]【英文标题】: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 << s.size();
(或cout << s.length();
...它们是同义词)。当您执行sizeof(s)
时,您获取的不是字符串有效负载的大小,而是拥有有效负载的字符串对象的大小。
@Caleth 我应该知道这是重复的,谢谢。
如果你使用#include <string>
,你的编译效率会更高,这是一个单一的包含文件版本,不标准的庞然大物bits/stdc++.h
。通常,只在代码或标头中包含实际解析符号的标头。
【参考方案1】:
string
是一个对象。通过使用sizeof
,您将获得该对象的成员 的大小。其中一个成员可能是指向实际字符串内容的指针,但无论指针指向什么,指针的大小都是恒定的。
【讨论】:
我尝试在其他编译器上运行它...答案不是 24 但它仍然是一个常数,无论字符串的大小如何...所以指针的大小会随着编译器的变化而变化? ? @ChiragJoshistd::string
类的定义随着标准库的实现而改变。指针的大小在编译器之间不会改变,但会在不同的 CPU 架构之间发生变化(并且 x86 支持具有不同大小指针的多种模式)。
@ChiragJoshi 它可能是指针的大小,特别是如果一个是 32 位而另一个是 64 位。也可以是其他成员的数量和类型。【参考方案2】:
考虑这个简单的例子
class string
const char* _ptr;
....
....
public:
当你写sizeof(string)
时,你会得到类的大小,而不是_ptr
指向的字符串字面量的大小。
【讨论】:
以上是关于当我运行此代码时,无论字符串是啥,结果始终为 24。为啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章