我已经在这个问题上搜索了几个小时的互联网和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;
}
答案 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{});