可变大小的对象初始化

Variable sized objects initialization

本文关键字:对象 初始化      更新时间:2023-10-16

这里,Student_info是一个类。我试图用不同长度的字符串初始化它,但当它应该取决于输入字符串长度时,它总是给出相同大小的对象。有什么建议吗?(名称和公司定义为字符串变量,而不是字符数组)

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]);

sizeof的结果对于给定类型(包括std::string和您自己的聚合字符串的类型Student_info)始终是常量。通过归纳很容易看出这一点:由于每个类型都是通过聚合基元(数字类型、指针等)构建的,并且所有基元都有固定的大小,因此您可以从它们中生成的任何类型也将有固定的尺寸。

存储可变数据量的类型(如std::stringstd::vector和其他类型)通过将指针聚集到存储其数据的内存区域来实现这一点。该区域的大小不是恒定的,但指针(以及包含类)的大小是.

sizeof()是一个编译时运算符。在运行时,它将始终为给定对象返回相同的常数值。

即使在对象中包含一个std::string,并为其分配不同的值,由sizeof()计算的封闭对象的大小也将保持不变,因为保存字符串的数据缓冲区由std::string内部处理(本质上是通过指针处理的,指针的大小与它指向的数据无关)。

如果要获取字符串的运行时长度,请使用其length()方法。