C++中存在隐式构造的现象:某些情况下,会隐式调用单参数的构造函数。
可以通过关键字 explicit 禁止掉隐式构造。
#includeusing namespace std; class Person { int m_age; public: Person() { cout << "Person() - " << this << endl; } 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 " << m_age << endl; } }; int main() { Person p1 = 20; // 等价于 Person p1(20); getchar(); return 0; }
#includeusing namespace std; class Person { int m_age; public: Person() { cout << "Person() - " << this << endl; } 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 " << m_age << endl; } }; //void test1(Person person) { // //} // //Person test2() { // return 40; //} int main() { //test1(30); //test2(); //Person p1 = 20; // 等价于 Person p1(20); Person p1; p1 = 40; getchar(); return 0; }
#includeusing namespace std; class Person { int m_age; public: Person() { cout << "Person() - " << this << endl; } 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 " << m_age << endl; } }; void test1(Person person) { } // //Person test2() { // return 40; //} int main() { test1(30); //test2(); getchar(); return 0; }
#includeusing namespace std; class Person { int m_age; public: Person() { cout << "Person() - " << this << endl; } 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 " << m_age << endl; } }; Person test2() { return 40; } int main() { test2(); getchar(); return 0; }



