C++编程法则100条空{}初始化讨论

Posted 奇妙之二进制

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++编程法则100条空{}初始化讨论相关的知识,希望对你有一定的参考价值。

🥇 关于博主👇🏻👇🏻👇🏻

👀 作者简介: 热衷于知识探索和分享的技术博主。
💂 csdn主页::【奇妙之二进制
✍️ 微信公众号:【Linux 世界

🎉精彩专栏:

   💪 【C++编程法则100条
   🎓 【面向工作git基础教程
​   🧡 【C++11新特性深入剖析
​   📚 【shell脚本编程基础与实战
​   🌎 【Linux网络编程面试
   ✍️ 【C++编译工具cmake入门到精通
   🤩 【Linux文本处理三剑客
   😉 【C++模板编程
   🥰 【VIM实用指南
   🔥 【Linux C/C++编译链接和调试调优
   ✨ 【面向对象分析和设计
   🎉 【Ubuntu/Linux系统管理
   🤔 【C/C++笔面试精选
   ✔️ 【Linux并发编程面试与实战
   🚀 【C/C++常用开源库实战
   😊 【Linux常用命令详解
​ …

💂关于作者: 曾就职于国内知名安防上市公司,现就职于国内知名AMR机器人公司,担任高级系统软件工程师。2020年至今保持CSDN博客专家,CSDN C/C++领域优质创作者头衔。全网5万+粉丝。十载寒冰,难凉热血;多年过去,历经变迁,物是人非。 然而,对于技术的探索和追求从未停歇。 💪坚持创作,热衷分享,初心未改,继往开来!

参考:

  • https://en.cppreference.com/w/cpp/language/value_initialization
  • https://en.cppreference.com/w/cpp/language/default_initialization#Notes
  • https://en.cppreference.com/w/cpp/language/zero_initialization

我们今天来讨论值初始化。提供一个空的()或者来初始化对象,会有什么样的行为呢?

我们先来看下零初始化:

零初始化

在C语言全局变量如果没有初始化,会自动初始化为0,这一点C++也是。

C++提供以下几种形式让对象完成0初始化。

有一点需要注意,如果T定义了构造函数,即使是无参构造,那么就不会进行0初始化了,只会调用构造函数进行初始化。而构造函数初始化,如果没有对成员进行初始化,对于类,将调用成员的默认构造函;对于标量类型,将采用默认初始化的方式,该方式取决于该变量是在栈,堆,还是全局,如果是全局,则初始化为0,如果是栈或者堆,那么将是随机值,这一点是和C语言保持一致的。

#include <string>
#include <iostream>
 
struct A

    int a, b, c;
;
 
double f[3];   // zero-initialized to three 0.0's
 
int* p;        // zero-initialized to null pointer value
               // (even if the value is not integral 0)
 
std::string s; // zero-initialized to indeterminate value, then
               // default-initialized to "" by the std::string default constructor
 
int main(int argc, char*[])

    delete p; // safe to delete a null pointer
 
    static int n = argc; // zero-initialized to 0 then copy-initialized to argc
    std::cout << "n = " << n << '\\n';
 
    A a = A(); // the effect is same as: A a; or A a = ;
    std::cout << "a = " << a.a << ' ' << a.b << ' ' << a.c << "\\n";

结果:

n = 1
a = 0 0 0

定义了构造函数之后,不会进行0初始化,将会调用定义的构造函数进行初始化。

struct A

    A() 
    int a, b, c;
;

A a;

a、b、c将是随机值。

以上是关于C++编程法则100条空{}初始化讨论的主要内容,如果未能解决你的问题,请参考以下文章

C++编程法则100条friend友元函数

C++编程法则100条(10)using用法之声明

C++编程法则100条关于内嵌类的使用细节

C++编程法则100条(11)关于&&&修饰成员函数的含义

c++编程 多项式的乘法

C 编程语言等效于 C++ 中的结构初始化