一、C++11 基础语法增强
1.1 初始化陷阱规避:() 与{}初始化的核心区别
一、基础概念补充
1. 统一初始化(Uniform Initialization)
统一初始化是 C++11 提出的概念,核心是用花括号
{}作为'通用初始化语法',可在任意初始化场景使用(变量、类成员、容器、不可拷贝对象等),解决 C++98 初始化语法混乱、场景受限的问题。
#include <iostream>
#include <vector>
#include <atomic>
using namespace std;
int main() {
// 场景 1:普通变量初始化({}适配所有基础类型)
int a{ 0}; // 基础类型初始化
double b{ 3.14};
// 场景 2:容器初始化(C++98 无法直接实现)
vector<int> vec{ 1, 3, 5}; // 直接初始化容器元素
// 场景 3:不可拷贝对象初始化(如 atomic)
atomic<int> ai1{ 0}; // 合法:{}初始化
// atomic<int> ai2 = 0; // 非法:=初始化不支持不可拷贝对象
cout << vec[0] << endl; // 输出:1
return 0;
}
2. std::initializer_list(核心)
std::initializer_list是 C++11 标准类型,用于接收花括号{}包裹的初始化列表,可作为构造函数/普通函数的形参。其内部元素为常量,不可修改;支持遍历,本质是轻量级的只读数组视图。
#include
std;
{
( val : list) {
cout << val << ;
}
}
{
({ , , , , });
;
}

