【发布时间】:2020-03-05 11:11:13
【问题描述】:
我试图理解使用 l/r 值调用的构造函数,所以我在下面创建了class A:
class A {
public :
A() { cout << "called default constructor" << endl ; }
A(const A&) { cout << "called copy constructor" << endl ; }
A(const A&&) { cout << "called move constructor" << endl ; }
};
在main函数中,我创建了一个实例a
int main()
{
A a(A());
return 0;
}
但是在实现的构造函数中没有构造函数被调用!
有什么解释吗?谢谢!
【问题讨论】:
-
调用构造函数时使用
{},A a(A())被解释为函数声明。 -
这能回答你的问题吗? What is the purpose of the Most Vexing Parse? Clang 警告说“括号被消除歧义作为函数声明 [-Wvexing-parse]”
-
尝试使用
a作为对象,你会感到惊讶。 -
这就是为什么你应该使用
A a{A{}};
标签: c++ class constructor copy-elision