我正在阅读有关复制构造函数以及复制初始化和直接初始化之间的区别。 我知道复制和直接初始化仅对(用户定义的)类类型有所不同,并且第一个有时意味着隐式转换(通过转换构造函数)。例如,如果我可以初始化类A的对象:
class A {
public:
// default constructor
A() : a(1) {}
// converting constructor
A(int i) : a(i) {}
// copy constructor
A(const A &other) : a(other.a) {}
private:
int a;
};
int main()
{
// calls A::A(int)
A a(10);
// calls A::A(int) to construct a temporary A (if converting constructor is not explicit)
// and then calls A::A(const A&) (if no elision is performed)
A b=10;
// calls copy constructor A::A(const A&) to construct an A from a temporary A
A c=A();
// what does this line do?
A d(A());
}
我读到最后一行没有通过从临时A()直接初始化d来创建A但是它声明了一个名为d的函数,它返回一个A并且接受一个函数类型的参数(一个指向函数的指针) )。 所以我的问题是,这是真的吗?如果确实如此,我如何从临时对象执行直接初始化:
type_1 name(type_2(args));
假设type_1
有一个带有type_2
类型参数的构造函数
这是不能做的事情吗?