简述C++11就地初始化与列表初始化

C++11 引入了就地初始化和列表初始化,这些初始化操作使得代码更加清晰、类型更加安全。

就地初始化(Uniform Initialization)

就地初始化是一种新的语法,其语法形式为大括号(也称作花括号)括起来的初始化器表达式。

简单类型变量的就地初始化

对于简单类型变量,可以使用就地初始化进行初始化。

int i{10}; // 就地初始化 i 为 10
double d{3.14}; // 就地初始化 d 为 3.14
bool b1{true}; // 就地初始化 b1 为 true
bool b2{false}; // 就地初始化 b2 为 false
char c{'a'}; // 就地初始化 c 为 'a'

类类型的就地初始化

对于类类型变量,也可以使用就地初始化进行初始化。

#include <string>

class Person {
public:
    Person(std::string name, int age): mName(name), mAge(age) {}
private:
    std::string mName;
    int mAge;
};

int main() {
    Person p{"张三", 18}; // 使用就地初始化进行初始化
    return 0;
}

列表初始化(List Initialization)

列表初始化使用花括号括起来的值得列表进行初始化操作。

简单类型变量的列表初始化

对于简单类型变量,可以使用列表初始化进行初始化。

int i{1}; // 就地初始化 i
int j{}; // 就地初始化 j 为零
int k{2.0}; // 编译错误,列表初始化不允许 narrowing 转换

类类型的列表初始化

对于类类型变量,也可以使用列表初始化进行初始化。

#include <string>

class Person {
public:
    Person(std::string name, int age): mName(name), mAge(age) {}
private:
    std::string mName;
    int mAge;
};

int main() {
    Person p{"张三", 18}; // 使用列表初始化进行初始化
    return 0;
}

使用列表初始化可以避免因为类型转换导致无法正确地初始化变量。

综上,就地初始化和列表初始化是 C++11 中引入的一些新的语法,它们使得初始化更加简单明了,同时可以避免类型转换带来的问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:简述C++11就地初始化与列表初始化 - Python技术站

(0)
上一篇 2023年6月20日
下一篇 2023年6月20日

相关文章

  • oracle客户端管理软件安装

    Oracle客户端管理软件安装 Oracle客户端管理软件是访问Oracle数据库的必备工具。本文将介绍Oracle客户端管理软件的安装步骤。 步骤一:下载Oracle客户端管理软件 首先,需要从Oracle官网下载Oracle客户端管理软件的安装包。请注意,下载的安装包版本必须与所连接的Oracle数据库版本一致。下载完成后,可将安装包放置在本地磁盘。 步…

    其他 2023年3月28日
    00
  • Spring源码解析之推断构造方法

    标题:Spring源码解析之推断构造方法 前言 在Spring的IoC容器中,我们可以使用自动装配的方式注入Bean实例,Spring会根据构造方法参数的类型和名称来自动匹配注入对应类型的实例。Spring是如何实现自动装配的呢?从源码层面解析,自动装配的核心就是推断构造方法。 推断构造方法 Spring会尝试推断某个Bean的构造方法,根据该构造方法参数类…

    other 2023年6月27日
    00
  • JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码

    本攻略将为大家介绍如何使用JavaScript禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码。以下是操作步骤: 步骤一:在HTML文件中引入JavaScript文件 在HTML文件中引入以下JavaScript文件,复制下方代码并粘贴至HTML文件的<head>标签中: <script type="text/java…

    other 2023年6月27日
    00
  • linux搭建squid代理服务器的完整步骤

    下面是详细讲解“Linux搭建Squid代理服务器的完整步骤”的攻略。其中,笔者以在Ubuntu 18.04系统上安装Squid为例介绍,其他系统可根据情况做相应调整。 1. 安装Squid 在终端输入以下命令,安装Squid: sudo apt-get update sudo apt-get install squid 2. 配置Squid 在安装完成后,…

    other 2023年6月27日
    00
  • javascript中局部变量和全局变量的区别详解

    JavaScript中局部变量和全局变量的区别详解 在JavaScript中,变量的作用域可以分为局部作用域和全局作用域。局部变量和全局变量的主要区别在于它们的作用范围和生命周期。 局部变量 局部变量是在函数内部声明的变量,只能在函数内部访问。它们的作用范围被限制在声明它们的函数内部,超出该范围将无法访问。 以下是一个示例,说明局部变量的使用: functi…

    other 2023年7月28日
    00
  • linux系统的初始化配置浅析

    Linux系统的初始化配置浅析 简介 Linux作为一种被广泛应用的操作系统,其初始化配置也就显得尤为重要。一个完整的配置流程可以让Linux系统运转更加稳定,同时也可以提高其安全性。本文将对Linux系统的初始化配置做一个浅析,主要包括以下内容: SSH配置 防火墙配置 SELinux配置 SSH配置 生成SSH密钥 SSH密钥用于在远程登录时进行身份认证…

    other 2023年6月20日
    00
  • windows8管理无线网络配置文件(用命令实现)

    下面是完整攻略: 标题:Windows 8 管理无线网络配置文件(用命令实现) 1. 查看已连接的无线网络 首先我们需要查看已连接的无线网络,可以通过以下命令实现: netsh wlan show interfaces 以上命令会显示当前已连接的网络接口以及连接状态。 2. 查看已保存的无线网络配置文件 如果想要查看已保存的无线网络配置文件,可以通过以下命令…

    other 2023年6月25日
    00
  • Python字符串切片操作知识详解

    Python字符串切片操作是一项非常重要的基本操作。字符串切片操作可以取出一个字符串中的一部分,而不影响原字符串的内容。 1. 基本语法 字符串切片的基本语法如下所示: string[start:end:step] 其中,start是起始位置,end是结束位置(不包含在被切片的结果中),step是间隔。 2. 示例说明 下面是两个示例说明: 2.1. 取出字…

    other 2023年6月20日
    00
合作推广
合作推广
分享本页
返回顶部