我在3个不同的编译器(G ++,clang ++,CL.exe)中尝试了以下代码片段,他们都向我报告他们无法消除重载构造函数的歧义.现在,我知道如何修改对构造函数的调用以使其选择一个或另一个(要么明确表示第二个参数是无符号的文字值或显式地转换它).
但是,我很好奇为什么编译器会首先尝试在构造函数之间进行选择,因为其中一个构造函数是私有的,并且构造函数的调用发生在main函数中,该函数应该在类的范围之外.
任何人都可以开导我吗?
class Test
{
private:
Test(unsigned int a, unsigned int *b) { }
public:
Test(unsigned int a, unsigned int b) { }
};
int main()
{
Test t1 = Test(1,0); // compiler is confused
}
Run Code Online (Sandbox Code Playgroud) c++ ×1