C++中存在隐式构造的现象:某些情况下,会隐式调用单参数的构造函数
代码示例:
class Person {
// 一般单参数的构造函数才会使用隐式构造
int m_age;
public:
Person() {
cout << "Person() - " << this << endl;
}
// 明确的,表示:禁止隐式构造函数,外界不能使用隐式构造
explicit Person(int age) :m_age(age) {
cout << "Person(int) - " << this << endl;
}
Person(const Person &person) {
cout << "Person(const Person &person) - " << this << endl;
}
~Person() {
cout << "~Person() - " << this << endl;
}
void display() {
cout << "display() - age is " << this->m_age << endl;
}
};
void test1(Person person) {
}
Person test2() {
return 30;
}
应用示例
Person person(10);
person = 20;
// 打印结果是20
person.display();
会调用两次构造函数
匿名对象调用次数
Person person(10);
// 隐式构造,age值为变为30
person = test2();
// 隐式构造,age值为10
Person person = 10;
注意:一般单参数的构造函数才会使用隐式构造