区别 1: 可能只知道 一个效率高一个效率低,具体低在哪里?
区别 2:成语变量是 引用, 或者const 修饰,必须初始化.
- 区别2 这里不做解释, 具体讲解1:
如果成员变量类型是 内置类型(int, char ), 那么初始化和赋值的成本是相同的.这里的效率高低, 指的是自定的类型(class)
class test
{
public:
test(){
std::cout<<"construct..."<<std::endl;
}
test(test &t)
{
std::cout<<"copy construct ..."<<std::endl;
}
test& operator =(test &t)
{
std::cout<<"copy assignment..."<<std::endl;
return *this;
}
};
class yang
{
public:
yang(test y);
yang(test &y);
test ff;
};
/*赋值 & 参数传递方式:赋值*/
yang::yang(test t)
{
ff = t;
}
/*初始化 & 参数传递方式:赋值*/
yang::yang(test t):ff(t)
{
}
/*赋值 & 参数传递方式:引用*/
yang::yang(test &t)
{
ff = t;
}
/*初始化列表 & 参数传递方式:引用*/
yang::yang(test &t):ff(t)
{
}
输出结果
初始化列表 & 参数传递方式:引用
test t;
std::cout<<"----------------"<<std::endl;
yang sen(t);
construct...
----------------
copy construct ... 输出结果: 只调用了拷贝构造函数
赋值 & 参数传递方式:引用
test t;
std::cout<<"----------------"<<std::endl;
yang sen(t);
construct...
----------------
construct...
copy assignment... 输出结果: 调用了构造函数, 以及拷贝赋值函数
参数传递如果不是引用的话, 更离谱
初始化 & 参数传递方式:赋值
construct...
test t;
std::cout<<"----------------"<<std::endl;
yang sen(t);
construct...
----------------
copy construct ...
copy construct ... 两次拷贝构造
赋值 & 参数传递方式:赋值
test t;
std::cout<<"----------------"<<std::endl;
yang sen(t);
construct...
----------------
1: copy construct ...
2: construct...
3: copy assignment...
解释下:
1: copy construct ... 是调用 yang sen(t) 进行参数传递,
2: construct... 是定义 test ff;
3: copy assignment... 是对ff赋值 ff = t;
如有哪里不对的地方, 请指出,后期会更改