【C++】关键字explicit的做用

简单的讲,关键字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

转载请注明出处。对象