关于复制构造函数的问题!!!完全崩溃!
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
A(int x): m_x(x) { cout << " 运行构造函数 "; }
~A() { cout << " 运行析构函数 "; }
A(const A &rhs): m_x(rhs.m_x) {cout << " 运行复制构造函数 ";}
void output() const { cout << " ok " << m_x; }
private:
int m_x;
};
int main()
{
A obj(5); //ok, 输出 "运行构造函数" 没有问题
A a = 5; // ok 但是输出的还是 "运行构造函数" 这里完全崩溃,跟C++primer上讲的不一样啊
const A &ref = 6; // ok 输出 "运行构造函数"
A &ref = 6; // error 编译器报告出错
system("pause");
return 0;
}
完全没法理解上面的后三条啊,这与我以前的理解完全相悖!
A a = 5; 按照C++Primer上讲的这里应该调用复制构造函数啊, 因为这里是显示复制初始化啊 由于5不为A类型,那么这里应该调用相应构造函数创建一个临时对象,然后再将这个临时对象传递给复制构造函数创建对象a ,之后应该就是释放临时对象
const A &ref = 6;
A &ref = 6;
这两个也没法理解!!崩溃!!!
望高手指点!!!