c++的对象初始化

忍不住了,不得不吐槽一下,妈的,太复杂了,真难,搞得太复杂了,看不懂,看不懂,真的越来越复杂了,没有必要啊!

看得了头皮发麻,搞不明白,咱又不是干编译器的,投降了。 工程代码中,代码风格要保持简洁,可读性好,可维护性好,没事千万别整一些奇奇怪怪的初始化秀技术,别过度依赖语言特性与编译器特性,最简单就是最好的!

我摊牌了,看了两天没有彻底看明白,我放弃了。把我看明白的部分作一下笔记,免得后续忘记了又重复看,浪费时间。

C++的初始化方式

  • Value initialization, e.g. std::string s{};
  • Direct initialization, e.g. std::string s(“hello”);
  • Copy initialization, e.g. std::string s = “hello”;
  • List initialization, e.g. std::string s{‘a’, ‘b’, ‘c’};
  • Aggregate initialization, e.g. char a[3] = {‘a’, ‘b’};
  • Reference initialization, e.g. char& c = a[0];

只介绍一下值初始化与聚合初始化, 因为很常用,尤其是咱们初始化结构体对象时。

值初始化

使用空的 {}进行值初始化。(即然c++11已经引入了 {}, 咱们也就别使用 ()了吧,也就提了)。

规则是这样的:

我只记两点:
第一:当对一个类对象提供了默认构造函数时,进行值初始化时,会执行你提供的构造函数,如果你的构造函数内未对成员变量进行初始化,它们就是未初始化状态。

第二:当用户不提供任何构造函数时,编译器会生成默认的构造函数,进行值初始化时,会首先进行零初始化,然后再调用默认生成的构造函数(non-trivial时)。

聚合初始化

针对聚合体,会进行聚会初始化, 使用 {arg1, arg2, …}的格式。

  • no private or protected direct (since C++17)non-static data members
  • no user-declared constructors (until C++11)
  • no user-provided constructors (explicitly defaulted or deleted constructors are allowed)(since C++11)(until C++17)
  • no user-provided, inherited, or explicit constructors (explicitly defaulted or deleted constructors are allowed)(since C++17)(until C++20)
  • no user-declared or inherited constructors(since C++20)
  • no virtual, private, or protected (since C++17) base classes
  • no virtual member functions
  • no default member initializers (since C++11) (until C++14)

强烈建议

Original: https://www.cnblogs.com/yinheyi/p/14839418.html
Author: 殷大侠
Title: c++的对象初始化

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535448/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Windows Runtime——-面向对象化的c++(并非意味着托管)

    Windows8的开发平台总体上分为两部分:一是全新的WinRT,界面搭配Metro style,二是传统的Win32、.NET(SL)、IE三大平台,界面为传统窗体风格。其中全新…

    C++ 2023年5月29日
    074
  • C++ 内联函数解析(inline)

    inline是C++语言中的一个关键字,可以用于程序中定义内联函数,inline的引进使内联函数的定义更加简单。说到内联函数,这里给出比较常见的定义,内联函数是C++中的一种特殊函…

    C++ 2023年5月29日
    044
  • dev c++ 无法单步调试

    遇到cout语句中有endl时,点击下一步无反应,需将endl改为’\n’ 或直接添加 #define endl ‘\n’ 替换qt…

    C++ 2023年5月29日
    049
  • C++ CRTP

    CRTP 英:The curiously recurring template pattern (CRTP) is a C++ idiom in which a class X d…

    C++ 2023年5月29日
    085
  • [C++] const与重载

    下面的两个函数构成重载吗? cpp;gutter:true; void M(int a){} //(1) void M(const int a){} //(2)</p>…

    C++ 2023年5月29日
    082
  • c++类大四个默认函数-构造函数 析构函数 拷贝构造函数 赋值构造函数

    每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不编写上述函数,C++编译器将自动为A 产生四个缺…

    C++ 2023年5月29日
    060
  • 面向对象C++编程与实践考试答案与解析

    一、选择题(每题2分,共2×20=40分) (1) 以下不能对数组 a 进行正确初始化的语句是( C )。A. int a[2][3] = { 0 };B. int a[ ][3]…

    C++ 2023年5月29日
    058
  • (筆記) 如何讀取binary file某個byte連續n byte的值? (C/C++) (C)

    Abstract通常公司為了保護其智慧財產權,會自己定義檔案格式,其header區會定義每個byte各代表某項資訊,所以常常需要直接對binary檔的某byte直接進行讀取,且連續…

    C++ 2023年5月29日
    048
  • std::get<C++11多线程库~线程间共享数据>(10):使用互斥量保护共享数据(2)

    1 #ifndef USE_CODE_PROTECTED_DATA_H 2 #define USE_CODE_PROTECTED_DATA_H 3 4 /* 5 * &#x8BDD…

    C++ 2023年5月29日
    042
  • 自己总结 C++ 代码规范

    1.编写原则,代码尽量简单,简洁,高效,自己写的代码让自己和别人容易看懂 2.命名: a. 类的成员变量加前缀 m_(表示 member)。 常量全用大写的字母,用下划线分割单词(…

    C++ 2023年5月29日
    054
  • 聊聊 C++ 中几类特殊成员函数

    一:背景 在 C# 中要说 &#x7C7B;默认给我们定义的特殊成员函数,莫过于 &#x6784;&#x9020;&#x51FD;&#x65…

    C++ 2023年5月29日
    056
  • Windows 8 添加隐私策略(C++版)

    well.新年上班第一天.不幸收到MS官方针对我们Snack Cards应用程序被打回消息.看看Report 内容如下: The app has declared access t…

    C++ 2023年5月29日
    060
  • 【转】C++11 新特性总结

    其他路径: CSDN: https://blog.csdn.net/wodehao0808 微信公众号:程序喵星人 更多资源和视频教程,QQ:1902686547 前言 转载请注明…

    C++ 2023年5月29日
    063
  • Kruskal算法(二)之 C++详解

    在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。 例如,对于如上图G4所示的连通网可以有多棵…

    C++ 2023年5月29日
    056
  • c++ 数字类型转string

    include using namespace std; std::to_string(x) 几乎所有的数字类型都可以转 桂棹兮兰桨,击空明兮溯流光。 Original: http…

    C++ 2023年5月29日
    037
  • Modern C++ 模板通用工厂

    Modern C++ 模板通用工厂 1 简单应用示例 1.1 示例代码 1.2 分析说明 2 简单工厂模式 2.1 示例代码 2.2 分析说明 3 工厂 + 静态注册 3.1 示例…

    C++ 2023年5月29日
    064
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球