简单的讲,关键字explicit能够禁止单参构造函数被用于自动类型转换。ios
看个单参构造函数用于自动类型转换的例子:函数
#include <iostream> using namespace std; class Stack { public: Stack(int size) { m_size = size; }; int getSize() { return m_size; } private: int m_size; }; int main() { Stack stk(5); std::cout << stk.getSize() << std::endl; stk = 10; // 发生自动类型转换:10经过构造函数隐式创建一个对象 std::cout << stk.getSize() << std::endl; return 0; }
若是想禁止该类型转换(要求类的使用者必须显示调用类的构造函数),使用explicit关键字修饰构造函数便可:
explicit Stack(int size) { m_size = size; };
如此修饰后,上面的程序在编译时会给出错误提示。spa
咱们设计类的时候参考的一个原则是:易于正确使用,难以错误使用。设计
2011-12-11 任洪彩 qdurenhongcai@163.comcode
转载请注明出处。对象