这里,Student_info是一个类。我试图用不同长度的字符串初始化它,但它总是给出相同大小的对象,当它应该依赖于输入字符串长度。有什么建议? (名称和公司定义为字符串变量,而不是char数组)
Structure of class Student_info
{ string name, company;
int yr, age;
}
Student_info *s[5];
s[0]= new Student_info("Aakash Goyal","form MNNIT Allahabad",2,57);
cout<<endl<<s[0]->getCompany()<<" is the company"<<endl;
cout<<endl<<s[0]->getName()<<" is the name and the size is: "<<sizeof(*s[0]);
s[1]= new Student_info("Hare Krishna","Hare Krsna Hare Rama",1,34);
cout<<endl<<s[1]->getCompany()<<" is the company"<<endl;
cout<<endl<<s[1]->getName()<<" is the name and the size is: "<<sizeof(*s[1]);
答案 0 :(得分:3)
对于给定类型,sizeof
的结果始终是常量,包括std::string
和您自己的聚合字符串的类型Student_info
。通过归纳很容易看出:由于每种类型都是通过聚合基元(数字类型,指针等)构建的,并且所有基元都具有固定的大小,因此您可以从中制作的任何类型也具有固定的大小。
存储可变数据量的类型(例如std::string
,std::vector
和其他类型)通过将指针聚合到存储其数据的内存区域来执行此操作。该区域的大小不是常量,但指针的大小(因此包含类)是。
答案 1 :(得分:2)
sizeof()
是一个编译时运算符。在运行时,它将始终为给定对象返回相同的常量值。
即使在对象中包含std::string
并为其指定了不同的值,由sizeof()
计算的封闭对象的大小也将保持不变,因为保存字符串的数据缓冲区由std::string
内部处理(主要通过一个指针,它再次具有与其指向的数据无关的常量大小)。
如果要获取字符串的运行时长度,请使用其length()
方法。