在主类中,我打印sizeof(person-> name),然后我执行相同的sizeof(name)
当我将相同的char数组传递给Person构造函数时。
但是为什么在两种情况下我都得到不同的结果
在第一种情况下,sizeof返回32
而在第二种情况下,sizeof返回6
This is output
这是代码:-
#include <iostream>
#include "Person.h"
int main()
{
char name[] = {'H','o','b','b','i','t'};
Person *person = new Person(name , 203);
std::cout << "p->Name size - " << sizeof(person->name) << " char array size " << sizeof(name) << std::endl;
delete person;
return 0;
}
#include "Person.h"
#include <iostream>
Person::Person(){};
Person::Person(char name[],int age)
{
this->name = name;
this->age = age;
}
Person::~Person()
{
std::cout << "\n Destructor called" << std::endl;
}
void Person::sayHello()
{
std::cout << "\n Hello " << this->name << " " << this->age << std::endl ;
}
答案 0 :(得分:4)
sizeof
中的 std::string
不能衡量字符串占用的全部内存。它测量std::string
对象的大小。
sizeof
上的std::string
是一个常数,与存储在其中的字符串的长度无关。
由于元信息和小的字符串优化,与std::string
相比,char name[]
确实有开销,并且该开销(取决于实现方式)最大约为20个字节。
对于0到〜20个字符的范围,std::string
将始终占据约20个字节的内存。对于超过20个字符,std::string
将占据〜20 +字符字节数。
是的,对于很少数量的字符,它可以是字节的5倍。但是对于正常的用例,这种开销可以忽略。