Effective C++ 05条款实列理解

https://www.cnblogs.com/alephsoul-alephsoul/archive/2012/10/21/2733061.html

/*首先,对于一个空类(empty class),在C++处理过它之后,它便不再是一个空类了。 
当用户没有对它进行声明,编译器会自动为它声明(编译器版本):

一个copy构造函数
一个copy assignment操作符
一个析构函数
*/
#include <iostream>
using namespace std;

class A{
};

int main(){
	A a1;
	A a2;
	a1 = a2;
	return 0;
}
//结果:编译运行成功!
//当类中有引用,常量定义时,编译器不会为其生成‘=’运算符的函数。
/*C++不允许让reference改指向不同对象
引用的特点:

①一个变量可取多个别名。
②引用必须初始化。
③引用只能在初始化的时候引用一次 ,不能更改为转而引用其他变量。
*/
#include <iostream>
using namespace std;

class A{
public:
	int value;
	const int constValue;
	A(int v) :constValue(v){}
};

int main(){
	A a1(10);
	A a2(20);
	a1 = a2;
	return 0;
}
//error C2582: “operator =”函数在“A”中不可用
//当类中有引用,常量定义时,编译器不会为其生成‘=’运算符的函数。
/*C++不允许让reference改指向不同对象
引用的特点:

①一个变量可取多个别名。
②引用必须初始化。
③引用只能在初始化的时候引用一次 ,不能更改为转而引用其他变量。
*/
#include <iostream>
using namespace std;
template<class T>
class NameObject{
public:
	NameObject(string& name, const T& value):nameValue(name),objectValue(value){};
private:
	string &nameValue;
	const T objectValue;

};

int main(){
	string newDog("Persephone");
	string oldDog("satch");
	NameObject<int>p(newDog, 2);
	NameObject<int>s(oldDog, 36);
	p = s;
	return 0;
}
//“operator =”函数在“NameObject<int>”中不可用

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值