0

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

2 回答 2

3

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

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

于 2013-08-07T08:36:08.243 回答
2

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

即使您std::string在对象中包含 a 并为其分配不同的值,由 计算的封闭对象的大小sizeof()将保持不变,因为保存字符串的数据缓冲区是由内部处理的std::string(基本上是通过指针,它又具有一个恒定的大小,独立于它指向的数据)。

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

于 2013-08-07T08:37:40.290 回答