C++默认初始化和值初始化

文章目录

  • 前提知识
    • 变量和对象
    • 初始化
  • 默认初始化
  • 值初始化
    • 值初始化出现的情况

前提知识

变量和对象

变量提供了具名的、可供程序操作的存储空间。C++中的每个变量都有其数据类型,数据类型决定着变量所占内存空间的大小和布局方式、该空间能存储的值的范围,以及变量能参与的运算。在C++中,变量对象一般可以相互使用。

初始化

当对象在创建时获得了一个特定的值,我们说这个对象被初始化了。值得注意的是:在C++语言中初始化和赋值是两个完全不同的操作。初始化不是赋值,初始化的含义是创建变量的时赋予其一个初始值,而赋值的含义时把对象(变量)的当前值擦除,而以一个新值来代替。

默认初始化

如果定义变量的时没有指定初始值,则变量被默认初始化,此时变量被赋予了“新默认值”。默认值的内容由变量的类型来决定,同时定义变量的位置也会有影响(类类型,块作用域,全局等)。
如果是内置类型的变量未被显式初始化,它的值由定义的位置决定。定义于任何函数体之外的变量将被初始化为0。例外的情况有,在函数体内定义的局部静态变量,只被初始化一次,调用结束后值仍然有效。

一个不被初始化的内置类型变量的值是未定义的,如果试图拷贝或者以其他形式访问此类值将引发错误。

值得注意的是: 对于数组而言,数组定义在函数体内,其元素是执行默认初始化的。

#include 
using std::cout; using std::endl;
int main()
{
	int val;
	int arr[12];
	cout << val << endl; //报错,使用了未初始化的局部变量
	cout << arr[2] << endl; //数组元素默认初始化

	return 0;
}

值初始化

用数值初始化变量,如果没有给定一个初始值,就会根据变量或类对象的类型提供一个初始值。对于int类型其值初始化后的值为0。

值初始化出现的情况

  • 在数组初始化的过程中我们提供的初始值数量少于数组的大小。
  • 当我们不使用初始值定义一个局部静态变量时
  • 当我们通过书写形如T()的表达式显式请求值初始化时,其中T是类型名(vector的一个构造函数只接受一个实参用于说明vector大小,见《C++primer》p88),它就是使用一个这种形式的实参来对它的元素初始化器进行值初始化。

文章持续更新。。。。。

你可能感兴趣的:(C++)