可变大小的对象初始化
Variable sized objects initialization
这里,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::string
、std::vector
和其他类型)通过将指针聚集到存储其数据的内存区域来实现这一点。该区域的大小不是恒定的,但指针(以及包含类)的大小是.
sizeof()
是一个编译时运算符。在运行时,它将始终为给定对象返回相同的常数值。
即使在对象中包含一个std::string
,并为其分配不同的值,由sizeof()
计算的封闭对象的大小也将保持不变,因为保存字符串的数据缓冲区由std::string
内部处理(本质上是通过指针处理的,指针的大小与它指向的数据无关)。
如果要获取字符串的运行时长度,请使用其length()
方法。
相关文章:
- 用C++中的CPerson(类)类型的对象初始化STL矢量
- 对象初始化中是否允许指向此成员的指针?
- 对象初始化后在C++中显示 char 数组时的异常行为
- 为什么两种不同的对象初始化方式给出不同的输出
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- afxmem.cpp中的对象初始化差异
- 删除通过取消引用新对象初始化的对象
- 如何使用sregex_token_iterator对象初始化向量
- 关于默认构造函数,对象初始化/使用C++ OOP
- C++ 基元类型初始化与对象初始化
- 哪个函数负责C++全局范围内的类对象初始化?
- C++中构造函数的对象初始化出现问题
- 如何修复模板 BST 类的对象初始化
- 无法在 QML/C++ 中使用绑定对象初始化 UI
- 为什么参数可以在对象初始化时通过赋值运算符传递给构造函数?
- 类对象初始化的二维向量
- GCC:当层次结构中存在虚拟继承时,C++11 内联对象初始化(使用 "this")不起作用
- 对象初始化
- 类对象初始化
- 使用从另一个类继承的类的对象初始化成员对象