29.初始化和赋值的区别
29.初始化和赋值的区别
在C++中,初始化和赋值是两个不同的概念。
需要注意的是,对于某些类型的变量,初始化和赋值的效果是一样的。例如,对于基本类型的变量,使用等号进行初始化和赋值的效果是一样的。但是对于一些复杂类型的变量,如类对象,初始化和赋值的效果是不同的。在这种情况下,初始化会调用类的构造函数,而赋值会调用类的赋值运算符重载函数。
●简单类型
初始化是在定义变量时给它一个初始值,可以使用等号或者花括号来进行初始化。例如:
int a = 10;//使用等号进行初始化
int b{20};//使用花括号进行初始化
赋值是在变量已经定义并且有了一个值的情况下,给它一个新的值。例如:
int c = 30;//定义并初始化变量c
c = 40;//给变量c赋值为40
●对于类和复杂数据类型来说,这两者的区别就大了,举例如下:
class A
{
public:
int num1;
int num2;
public:
A(int a=0, int b=0):num1(a),num2(b){};
A(const A& a){};
//重载 = 号操作符函数
A& operator=(const A& a)
{
num1 = a.num1 + 1;
num2 = a.num2 + 1;
return *this;
};
};
int main()
{
A a(1,1);
A a1 = a;//拷贝初始化操作,调用拷贝构造函数
A b;
b = a;//赋值操作,对象a中,num1 = 1,num2 = 1;对象b中,num1 = 2,num2 = 2
return 0;
}