假设我有这个功能:
void my_test()
{
A a1 = A_factory_func();
A a2(A_factory_func());
double b1 = 0.5;
double b2(0.5);
A c1;
A c2 = A();
A c3(A());
}
Run Code Online (Sandbox Code Playgroud)
在每个分组中,这些陈述是否相同?或者在某些初始化中是否有额外的(可能是可优化的)副本?
我见过有人说过这两件事.请引用文字作为证据.还请添加其他案例.
所以基本上这段代码:
class A {
};
class B {
B (const B& b) {}
public:
B (){}
B (const A& a) {}
};
int main()
{
A a;
B b1(a); //OK
B b2 = a; //Error
}
Run Code Online (Sandbox Code Playgroud)
只生成一个错误B b2 = a.那个错误是
错误:'B :: B(const B&)'是私有的
除了直接转换构造函数之外,为什么还要尝试调用复制构造函数?
从错误消息中可以清楚地看到B创建了一个临时文件然后用于复制构造,但为什么呢?这个标准在哪里?