变量大小的对象初始化

时间:2013-08-07 08:32:13

标签: c++

这里,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]);

2 个答案:

答案 0 :(得分:3)

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

存储可变数据量的类型(例如std::stringstd::vector和其他类型)通过将指针聚合到存储其数据的内存区域来执行此操作。该区域的大小不是常量,但指针的大小(因此包含类)是。

答案 1 :(得分:2)

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

即使在对象中包含std::string并为其指定了不同的值,由sizeof()计算的封闭对象的大小也将保持不变,因为保存字符串的数据缓冲区由std::string内部处理(主要通过一个指针,它再次具有与其指向的数据无关的常量大小)。

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