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>”中不可用