explicit的作用

  • 参考:https://stackoverflow.com/questions/121162/what-does-the-explicit-keyword-mean
class Foo
{
public:
    // single parameter constructor, can be used as an implicit conversion
    Foo(int foo) : m_foo(foo)
    {
    }

    int GetFoo() { return m_foo; }

private:
    int m_foo;
};

void DoBar(Foo foo)
{
    int i = foo.GetFoo();
    cout << i << endl;
}

int main(void)
{
    DoBar(42);//ok 
    return 0;
}

42是一个int类型,但是程序运行没有问题.因为Foo有一个整型的构造函数,所以发生了隐式转换.
如果在构造函数前加上explicit 则编译器就会报错

你可能感兴趣的:(explicit的作用)