定义多个变量

通过逗号分隔名称,能在单个语句中定义相同类型的多个变量。以下两段效果相同:


int a;
int b;

等同于:


int a,b;

常见错误:

int a, double b;//错误
int a; double b;//正确
int a;
int b;          //正确

初始化

int a;         // 默认初始化
int b = 5;     // 拷贝初始化
int c( 6 );    // 直接初始化

// 列表初始化 (C++11引进)
int d { 7 };   // 直接列表初始化
int e = { 8 }; // 拷贝列表初始化
int f {};      // 值列表初始化

int c( 6 );    // 直接初始化,直接将6设置到变量c当中,直接初始化很难区分变量和函数定义
int c();        //声明一个函数c

列表初始化

int width { 5 };    // 直接列表初始化,将变量width设置为 5
int height = { 6 }; // 拷贝列表初始化,将变量height设置为6
int depth {};       // 值初始化

列表初始化还有一个好处:不允许“缩小转换范围”。意味着,如果尝试使用变量不能安全保存的值,编译器将产生错误。

int width { 4.5 }; // error: int类型无法装下分数

拷贝和直接初始化只会删除小数部分,而将值4初始化到变量width(编译器会发出警告,因为很少需要丢失数据)。

当用空大括号对变量列表初始化时,进行值初始化。大多数情况,值初始化将变量初始化为零(或空,如果这更适合给定类型)。发生归零的这种情况,称为零初始化。

int width {}; // 值初始化 / 零初始化,将变量width设为 0

/*如果实际使用初始化的值,则显式设置初始化值。*/
int x { 0 };    // 显示将变量x设为 0
std::cout << x; // 使用设置的值

/*如果值在使用前被替换,请使用值初始化。*/
int x {};      // 值初始化 / 零初始化
std::cin >> x; // x直接被其它语句赋值