c ++将rhs对象作为参数传递给anther obejct的构造函数

时间:2017-08-04 02:53:57

标签: c++

我已经在这个问题上搜索了几个小时的互联网和SO。有类似的问题,但我找不到我的答案。基本上我试图传递一个rhs对象作为另一个类的构造函数的参数。我没有收到任何错误,但两个类的构造函数都没有被触发。如果我将这个过程分成两个步骤:先创建一个对象,然后将它作为lhs传递给另一个,那么它就可以了。我试着在下面有一个带有class2的拷贝构造函数,它也不起作用。

以下是编码。程序运行没有错误,但控制台没有记录输出。

struct class1
{
    class1()
    {
        std::cout << "class1 constructed" << std::endl;
    }
};


struct class2
{
    class2()
    {
        std::cout << "class2 default constructed" << std::endl;
    }
    template <typename T>
    class2(T)
    {
        std::cout << "class2 with template constructed" << std::endl;
    }

};

int main()
{
     class2 test(class1()); 
     return 0;
}

2 个答案:

答案 0 :(得分:1)

class2 test(class1()); 

在这一行 括号被消除歧义为函数声明

答案 1 :(得分:1)

这是一个most vexing parse问题。

class2 test(class1());不是变量定义(正如您所料),但是函数声明,该函数名为test并返回class2,取一个未命名的参数,这是一个指针to function(不需要任何东西并返回class1)。

您可以使用大括号(因为C ++ 11)。 e.g。

class2 test(class1{});