【现代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,使用花括号
相关推荐
CYRUS_STUDIO1 分钟前
C&C++ 代码安全再升级:用 OLLVM 给 so 加上字符串加密保护
c++·安全·llvm
矛取矛求6 分钟前
日期类的实现
开发语言·c++·算法
会开花的二叉树34 分钟前
彻底搞懂 Linux 基础 IO:从文件操作到缓冲区,打通底层逻辑
linux·服务器·c++·后端
在下雨59936 分钟前
项目讲解1
开发语言·数据结构·c++·算法·单例模式
清朝牢弟41 分钟前
Win系统下配置PCL库第一步之下载Visual Studio和Qt 5.15.2(超详细)
c++·qt·visual studio
深耕AI1 小时前
【MFC视图和窗口基础:文档/视图的“双胞胎”魔法 + 单文档程序】
c++·mfc
饭碗的彼岸one1 小时前
C++ 并发编程:异步任务
c语言·开发语言·c++·后端·c·异步
QT 小鲜肉1 小时前
【QT随笔】结合应用案例一文完美概括QT中的队列(Queue)
c++·笔记·qt·学习方法·ai编程
黑菜钟1 小时前
代码随想录第七天|● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 18.四数之和
c++·算法·leetcode
TNTLWT2 小时前
单例模式(C++)
javascript·c++·单例模式