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;

注意:一般单参数的构造函数才会使用隐式构造