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

在这里插入图片描述

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

1. 基本类型的初始化

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

int a{5};
double b{3.14};
char c{'c'};

2. 容器的初始化

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

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

3. 自定义类型的初始化

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

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)一起使用,为自定义类型提供了一种接收初始化列表的构造函数。

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。

int arr[]{1, 2, 3, 4};
std::array<int, 4> stdArr{1, 2, 3, 4};

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

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

std::vector<int> vec(10); // 10个元素的向量,使用圆括号
std::vector<int> vec{10}; // 1个元素的向量,元素值为10,使用花括号

相关推荐

  1. C++11统一列表初始化,initializer_list

    2024-03-23 05:16:02       32 阅读
  2. C++:现代类型转换

    2024-03-23 05:16:02       25 阅读
  3. C#对象初始化

    2024-03-23 05:16:02       59 阅读
  4. C++ 初始化列表

    2024-03-23 05:16:02       75 阅读
  5. c++ 指针的初始化

    2024-03-23 05:16:02       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-23 05:16:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-23 05:16:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-23 05:16:02       87 阅读
  4. Python语言-面向对象

    2024-03-23 05:16:02       96 阅读

热门阅读

  1. 初识Golang,Golang 中的结构体和方法

    2024-03-23 05:16:02       38 阅读
  2. 2024年奥莱利科技趋势报告解析

    2024-03-23 05:16:02       40 阅读
  3. Redis+Lua脚本+SpringAOP实现接口限流

    2024-03-23 05:16:02       42 阅读
  4. 从汉字之源厘清易混淆的倍数问题

    2024-03-23 05:16:02       41 阅读
  5. C# 多态 weijiejue

    2024-03-23 05:16:02       39 阅读
  6. 使用conda管理python环境

    2024-03-23 05:16:02       35 阅读
  7. Spark面试整理-如何创建RDD

    2024-03-23 05:16:02       46 阅读
  8. 使用conda创建python 虚拟环境

    2024-03-23 05:16:02       39 阅读
  9. RUST:Arc (Atomic Reference Counted) 原子引用计数

    2024-03-23 05:16:02       41 阅读
  10. Rust 语言的 HashMap

    2024-03-23 05:16:02       42 阅读
  11. Docker

    Docker

    2024-03-23 05:16:02      40 阅读
  12. RUST: let task = &mut task.unwrap().clone();

    2024-03-23 05:16:02       46 阅读