声明: 在环境/上下文中指定一个变量的名字。也就是说,声明仅仅是让编译器知道,而没有实际分配空间。
初始化: 给一个声明后尚未初始化的变量一个有意义的初始值。
赋值 : 销毁一个变量原来的值,并赋予一个新值。相当于改变了一个变量的状态
初始化是在声明一个变量的同时赋予它一个值,而赋值是已经声明过了变量,后续再对它进行赋值操作。对于内置类型:
//在一个块作用域内 { int i; //默认初始化,其值未定义 int j=0; //值初始化 j=1; //赋值 }
定义于块作用域内(类内也属于块作用域内)的内置类型变量将不被初始化,其值未定义;定义于块作用域外的全局变量被值初始化为0。
静态static变量如果没有显式的初始值,它将执行值初始化。
1 class X 2 { 3 int a; 4 public: 5 void ShowX(){cout << a ;} 6 X() = default; 7 }; 8 int main() 9 { 10 X xx; 11 xx.ShowX(); //对象xx中的a成员的值被默认初始化,由于a是在块作用域内定义的,所以此处输出的值未定义 12 13 return 0; 14 }
对于自定义类型和STL中的容器,
class A;
A a=A();//值初始化
std::vector<int> vec1;//默认初始化,调用默认构造函数
一个类对象进行默认初始化和值初始化,必须要有相应的默认构造函数。否则将会报错,因为无法构造这个类。