为什么我不能在我的构造函数上这样做
Person::Person(std:: string tname,int tage):
name=tname,
age=tage
{}
但这样做完全没问题
Person::Person(std:: string tname,int tage):
name(tname),
age(tage)
{}
其中 name 是字符串成员变量,age 是 int 成员变量。
??
你不能这样做,因为那不是 C++ 语言的语法。
以这种方式编写的原因是(至少对于类成员)初始化程序使用提供的参数调用类的构造函数。它不会创建类型,然后为它们分配值。使用初始化器而不是在构造函数体中赋值的全部意义在于避免构造一个对象然后为其赋值的双重步骤。
如果您有 3 个 classes A
,B
并且C
whereC
有a
typeA
和b
type 的成员,B
那么这个构造函数:
C() :
a(1234),
a(4567)
{
}
等价于类外的以下代码:
A a(1234);
B b(4567);
而这个构造函数:
C()
{
a = 1234;
b = 4567;
}
相当于:
A a; // default construct a
B b; // default construct b
a = 1234;
b = 4567;
在这些简单的情况下,编译器可能会优化掉这些小的差异,但对于更复杂的成员对象,默认构造后进行赋值可能会很昂贵甚至不可能(例如,如果成员对象没有默认构造函数)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句