小编Lar*_*son的帖子

C++构造函数重载中的范围和歧义

我在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++

4
推荐指数
1
解决办法
188
查看次数

标签 统计

c++ ×1