简单的讲,关键字explicit可以禁止单参构造函数被用于自动类型转换。
看个单参构造函数用于自动类型转换的例子:
#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; };
如此修饰后,上面的程序在编译时会给出错误提示。
我们设计类的时候参考的一个原则是:易于正确使用,难以错误使用。
2011-12-11 任洪彩 qdurenhongcai@163.com
转载请注明出处。
来源:oschina
链接:https://my.oschina.net/u/101347/blog/36934