小编joj*_*oja的帖子

"显式"构造函数对重载决策的影响

为什么以下代码不能编译,当我在A类中的构造函数之前删除显式关键字时,它编译?

使用Visual Studio 2013:

enum E { e1_0, e1_1 };

template<typename T>
struct A
{
    A() {}
    explicit A(unsigned long) {}
    A(T) {}
};

struct B
{
    B() {}
    B(E) {}
};


void F(B) {};
void F(A<short>) {};

void test()
{
    F(e1_0);
}
Run Code Online (Sandbox Code Playgroud)

错误:

1>------ Build started: Project: exp_construct_test, Configuration: Debug Win32 ------
1>  exp_construct_test.cpp
1>e:\exp_construct_test\exp_construct_test.cpp(23): error C2668: 'F' : ambiguous call to overloaded function
1>          e:\exp_construct_test\exp_construct_test.cpp(19): could be 'void F(A<short>)'
1>          e:\exp_construct_test\exp_construct_test.cpp(18): or       'void F(B)'
1>          while trying to …
Run Code Online (Sandbox Code Playgroud)

c++ constructor visual-c++ overload-resolution

5
推荐指数
1
解决办法
204
查看次数