explicit 关键字
作用: 表明该构造函数是显示的,而非隐式的,不能进行隐式转换!
#include <iostream> #include <string> using namespace std; class student { public: //默认隐式构造 student(int _age) { age = _age; cout << "age=" << age << endl; } student(int _age, const string _name) { age = _age; name = _name; cout << "age=" << age << "; name=" << name << endl; } ~student() { } int getAge() { return age; } string getName() { return name; } private: int age; string name; }; int main(void) { student xiaoM(18); //显示构造 student xiaoW = 18; //隐式构造 student xiaoHua(19, "小花"); //显示构造 student xiaoMei = { 18, "小美" }; //隐式构造 system("pause"); return 0; }
第二类隐式构造是初始化参数列表,C++11 前编译不能通过,C++11 新增特性。
如果将类中构造函数改成如下:
explicit student(int _age) { age = _age; cout << "age=" << age << endl; }
隐式构造部分就会报错: