【发布时间】:2014-10-14 09:48:32
【问题描述】:
我有两个班级:Age 和 Animal。
我认为Age的构造函数应该被调用两次:
- 第一次上
Animal a = Animal(13); - 第二次使用
a.getAge();(因为Age temp(age);在函数定义中)
但是...main() 的输出是Age constructor! 而不是Age constructor!Age constructor!,所以看起来这个构造函数只被调用了一次(我检查过它是在构造Animal 对象时调用的。)。 为什么?
这是我的代码:
class Age {
private:
int value;
public:
Age(int a) :value(a) { cout << "Age constructor!"; }
};
class Animal {
private:
Age age;
public:
Animal(int a) : age(a) {}
Age getAge() const { Age temp(age); return temp; }
};
void main() {
Animal a = Animal(13);
a.getAge();
}
【问题讨论】:
-
你有copy elision。
-
顺便说一句,你应该有
const Age& getAge() const { return age; }
标签: c++ constructor