C++ 补充 & C++ 11 - explicit 关键字

    技术2022-07-10  239

    explicit 关键字

    explicit /ɪkˈsplɪsɪt/ 明确的;清楚的;直率的;详述的

    作用是表明该构造函数是显示的, 而非隐式的.不能进行隐式转换! 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).

    demo1 代码:

    #include <iostream> #include <string> using namespace std; class student { public: student(int _age) { this->age = _age; cout << "arg=" << age << endl; } student(int _age, const string _name) { this->age = _age; this->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, "小美" }; /* 隐式构造 初始化参数列表, C++11 前编译不能通过, C++11 新增特性 */ system("pause"); return 0; }

    demo2 代码

    #include <iostream> #include <string> using namespace std; class student { public: explicit student(int _age) { this->age = _age; cout << "arg=" << age << endl; } explicit student(int _age, const string _name) { this->age = _age; this->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, "小美" }; /* 隐式构造 初始化参数列表, C++11 前编译不能通过, C++11 新增特性 */ system("pause"); return 0; }

    这样的话隐式就会报错, 显示就会没问题.

    结语:

    时间: 2020-06-30

    Processed: 0.024, SQL: 9