【现代C++】统一初始化

现代C++中的统一初始化(Uniform Initialization)是C++11引入的一项特性,它提供了一种统一的语法来初始化任何类型的对象。统一初始化旨在增强代码的一致性和清晰度,减少传统初始化方式中的歧义。以下是统一初始化的几种用法及相应的示例代码:

1. 基本类型的初始化

可以使用统一初始化来初始化基本数据类型。

cpp 复制代码
int a{5};
double b{3.14};
char c{'c'};

2. 容器的初始化

统一初始化可以用于STL容器,使初始化更加直观。

cpp 复制代码
std::vector<int> v{1, 2, 3, 4};
std::map<std::string, int> m{{"one", 1}, {"two", 2}};

3. 自定义类型的初始化

对于自定义类型,统一初始化提供了一种清晰的方式来初始化对象。

cpp 复制代码
class MyClass {
public:
    MyClass(int x, double y) : x(x), y(y) {}
private:
    int x;
    double y;
};

MyClass obj{5, 3.14};

4. 初始化列表

统一初始化与初始化列表(std::initializer_list)一起使用,为自定义类型提供了一种接收初始化列表的构造函数。

cpp 复制代码
class Container {
public:
    Container(std::initializer_list<int> list) {
        for (auto element : list) {
            vec.push_back(element);
        }
    }

private:
    std::vector<int> vec;
};

Container container{1, 2, 3, 4};

5. 数组的初始化

统一初始化可以用来初始化数组,包括C风格数组和std::array。

cpp 复制代码
int arr[]{1, 2, 3, 4};
std::array<int, 4> stdArr{1, 2, 3, 4};

6. 防止"最令人疑惑的解析"(Most Vexing Parse)

统一初始化可以消除C++中的"最令人疑惑的解析",这是当编译器将应该被解释为变量声明的表达式解释为函数声明时发生的。

cpp 复制代码
std::vector<int> vec(10); // 10个元素的向量,使用圆括号
std::vector<int> vec{10}; // 1个元素的向量,元素值为10,使用花括号
相关推荐
进化中的刀盾兽16 分钟前
从零实现 C++ Json-Rpc(十):把消息交给真实连接——MuduoConnection 与 ConnectionFactory
c++·rpc
青瓦梦滋7 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
CodeYp201912 小时前
第15讲:二叉搜索树
开发语言·c++·二叉搜索树
pipixia2003313 小时前
C++继承面试四连问:内存叠加、私有继承、sizeof、权限重映射
c++·面试·嵌入式·继承·面向对象·对象模型
牵猫散步的鱼儿16 小时前
C++ 内存分区
c++
choumin16 小时前
C++ 标准容器为什么不能存引用
c++·容器·引用类型
谙弆悕博士16 小时前
用 C 写了个 Windows 聊天室,踩了几个多线程和控制台的坑
c语言·开发语言·c++·windows·网络编程·聊天室
stolentime17 小时前
CF2277E Tree Guessing题解
c++·算法·贪心算法·交互·ad-hoc
syagain_zsx18 小时前
ODB 与 MySQL:C++ 里的 ORM 实践(类即表、事务铁律与查询封装)
开发语言·数据库·c++·mysql·工具库·1024程序员节
小鱼仙官18 小时前
使用Qt封装C/C++ 动态库 用于第三方调用
c语言·c++·qt