在C++中,初始化是一个异常复杂的问题,很多人认为初始化是赋值的一种,事实上,初始化和赋值是两个完全不同的操作。

列表初始化

要定义一个名为haif的int变量并初始化为0,以下4条语句都可以做到。

int haif = 0;
int haif = {0};
int haif{0};
int haif(0);

作为C++11标准的一部分,用花括号来初始化变量得到了全面应用,我们将这种用花括号的初始化方式称为列表初始化

列表初始化特点

如果我们使用列表初始化且初始值存在丢失信息的风险,则编译器将报错。

#include <iostream>
using namespace std;
int main()
{long double ans = 3.1415926536;int a{ans},b{ans};return 0;
}


而我们如果不使用列表初始化,编译器就不会报错,而且发生了数据丢失。

不过上面的都无关紧要,因为我们不会故意用long double的值去初始化int变量

默认初始化
如果定义变量时没有指定初值,则变量被默认初始化,此时变量会被赋予“默认值”。

如果是定义于任何函数外的变量(全局变量),则会被初始化为0

定义在函数体内部的变量将不被初始化,我们可以看到此时a[2]是一堆乱码。
如果试图拷贝或者以其他形式访问此类值将引发错误。

note:
定义于函数体内的内置类型的对象如果没有初始化,则其值未定义。类的对象如果没有显式地初始化,则其值由类确定。

小建议:
建议初始化每一个内置类型的变量。

C++变量的初始化问题及列表初始化相关推荐

  1. 现代C++新特性 列表初始化

    文字版PDF文档链接:现代C++新特性(文字版)-C++文档类资源-CSDN下载 1.回顾变量初始化 在介绍列表初始化之前,让我们先回顾一下初始化变量的传统方法.其中常见的是使用括号和等号在变量声明时 ...

  2. 就地初始化与列表初始化

    1.就地初始化   在 C++11 之前,只能对结构体或类的静态常量成员就地初始化,其他的不行. class C { private:static const int a=10; // yesint ...

  3. 初始化、赋值、默认初始化、列表初始化、类内初始值、直接初始化与拷贝初始化

    文章目录 初始化和赋值的区别 什么是默认初始化? 列表初始化 列表初始化的使用场景 不适合使用列表初始化的场景 类内初始值 混用string对象和C风格字符串 数组与vector对象 关于vector ...

  4. 变量之--列表初始化和结构化绑定

    变量之(变长)列表初始化 关键词 std::initializer_list 解释 在 C++98/03 中的对象初始化方法有很多种,这无疑增大了学习难度.这中情况在C++11中终于得到解决. 先看看 ...

  5. 构造函数初始化列表初始化成员变量的顺序

    构造函数采用初始化列表进行初始化时,成员变量的初始化顺序(与声明顺序有关) 最近学C++的时候一直很迷惑,特别是组合类的构造函数的执行顺序,一直都让我很头疼(下一篇博客再分享吧),在这里和大家分享一下 ...

  6. C++列表初始化容器

    initializer_list是一个模板类,可能你已经用过它了但不知道而已,比如下面的代码就用了 #include <iostream> #include <vector>i ...

  7. 列表初始化和赋值初始化的使用注意事项

    成员变量初始化方式有两种:列表初始化和赋值初始化.如下代码.但是这两种初始化表面上看着相同,但是用法和原理却并不相同.本篇博客主要讨论这两种初始化的使用方法和基本原理. class Test {pub ...

  8. 现代c++之列表初始化/统一初始化

    #include <map> #include <string>class CDemo { public:int x;int y; };int main(void) {int ...

  9. C++11列表初始化

    列表初始化: 1.旧语法中定义了初始化的几种不同形式,如下: int data = 0; //赋值初始化 int data = {0}; //花括号初始化 int data(0); //构造初始化 i ...

最新文章

  1. PyTorch中文版官方教程来啦(附下载)
  2. UTF-8 BOM(EF BB BF)
  3. 网站维护工作要专业更要谨慎
  4. Tree Recovery(二叉树递归遍历+求后序遍历模板)
  5. P7920-[Kubic]Permutation
  6. vue element-ui 无法渲染表格数据解决
  7. SweetAlert用法
  8. LeetCode——7. Reverse Integer
  9. 【英语学习】【Level 08】U01 Let's Read L6 Person of the year
  10. 基于lis3dh的简易倾角仪c源码_cm-23D柯尼卡美能达分光测色计色差仪CM-2300d
  11. 高效能人士的七个习惯读后感与总结概括-(第二章)
  12. 守望先锋为何如此火爆
  13. 一文带你了解机器翻译
  14. CentOS 7.9.2009查看本机IP地址
  15. jQuery设计思想
  16. 万物皆可秒—— 淘宝秒杀Python脚本,扫货618,备战双11!
  17. 【金融学】耶鲁大学 Financial Markets
  18. “数学黑洞”:任意一个4位自然数,将组成该数的各位数字重新排列,形成一个最大数和一个最小数,之后两数相减,其差仍为一个自然数。重复进行上述运算,最终会出现一个神秘的数,请编程输出这个神秘的数。
  19. 【华为机试真题Python】高矮个子排队
  20. 蓝桥杯真题 ——单词分析(python3)

热门文章

  1. 趣学算法之斐波拉契数列实现
  2. OPENSSL ENGINE机制
  3. Android之React Native平台与Android本地模块之间的调用
  4. 任务管理平台_jytask一个任务调度统一管理平台
  5. 语言 分组计算hr_干货 | HR不得不知的面试技巧
  6. python在web可以开发吗_Python Web开发
  7. python基础入门大作业怎么做_【百度飞桨】零基础Python课程大作业
  8. lisp画靶子 visual_基于VisualLISP的AutoCAD绘图命令的二次开发_沈良翼
  9. 有图有真相!这世界上,竟有人跟你长得一模一样!
  10. android root工具twrp,安卓手机没有twrp的情况,如何下刷入magisk并获得root权限.