C ++将调用哪个构造函数

时间:2014-03-03 04:15:48

标签: c++

如果在课堂上假设我有两个构造函数

Room()
{
length = 0;
width = 0;
}

&安培;

Room(int value = 8)
{
length = width = 8;
}

现在,如果从主要我打电话使用:

Room obj1;
obj.display();

将调用哪个构造函数或者它会抛出错误?我认为它会抛出错误,因为编译器无法调用正确的构造函数,因为存在两种相同类型的构造函数。这是正确的吗?

3 个答案:

答案 0 :(得分:2)

call of overloaded ‘Room()’ is ambiguous

所以它不会被编译

enter image description here

您可以使用codepad作为在线编译器

答案 1 :(得分:0)

  

默认构造函数是一个没有参数的构造函数,或者如果它有参数,所有参数都有默认值。

在这种情况下代码将无法编译...您可以从here

了解有关默认构造函数的更多信息

答案 2 :(得分:0)

假设这将是完整的程序

#include <iostream>
struct Room
{
    int length;
    int width;
    Room()
    {
        length = 0;
        width = 0;
    }
    Room(int value = 8)
    {
        (void)value;
        length = 8;
        width = 8;
    }
};
int main()
{
    Room obj1; // ambiguous call
    std::cout << obj1.length << "\n";
    return (0);
}

由于对Room声明obj1的构造函数的模糊调用,此代码将无法编译。