首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏C++核心准则原文翻译

    C++核心准则C.45:使用初始化初始化数据成员

    default constructor that only initializes data members; use in-class member initializers instead C.45:不要只初始化数据成员的默认构造函数 ;使用成员初始化器 Reason(原因) Using in-class member initializers lets the compiler generate the function 使用初始化器可以让编译器为你生成一个函数。编译器生成的函数效率更高。 (简单)默认构造函数应该比使用常量初始化数据成员做的更多。 译者注:差不多就是杀鸡焉用牛刀的意思。

    79700发布于 2020-03-25
  • 来自专栏零域Blog

    C++ 成员变量初始化

    本文是对《Effective C++》的”Item 4: Make sure that objects are initialized before they’re used”的笔记和验证。 结论 在进入构造函数体之前,数据成员的初始化就已完成。 数据成员的初始化顺序取决于声明顺序。 而进入函数体之前的数据成员的初始化如何控制呢?答案就是——成员初始化列表。 PS: 顺便吐槽一下很多建议使用成员初始化列表而不讲为什么的老师和书,你们多讲一句能费多大劲 T.T。 ,对成员的初始化还是以声明顺序为依据。

    1.4K20编辑于 2022-03-08
  • 来自专栏闷骚的程序员

    C++ 成员变量初始化

    本文是对《Effective C++》的”Item 4: Make sure that objects are initialized before they’re used”的笔记和验证。 结论 在进入构造函数体之前,数据成员的初始化就已完成。 数据成员的初始化顺序取决于声明顺序。 而进入函数体之前的数据成员的初始化如何控制呢?答案就是——成员初始化列表。 PS: 顺便吐槽一下很多建议使用成员初始化列表而不讲为什么的老师和书,你们多讲一句能费多大劲 T.T。 ,对成员的初始化还是以声明顺序为依据。

    2.8K10发布于 2020-04-14
  • 来自专栏C语言及其他语言

    C++ 构造函数初始化列表

    上面的构造函数(使用初始化列表的构造函数)显式的初始化的成员;而没使用初始化列表的构造函数是对的成员赋值,并没有进行显式的初始化初始化和赋值对内置类型的成员没有什么大的区别,像上面的任一个构造函数都可以。对非内置类型成员变量,为了避免两次构造,推荐使用构造函数初始化列表。但有的时候必须用带有初始化列表的构造函数: ? 1.成员类型是没有默认构造函数的。若没有提供显示初始化式,则编译器隐式使用成员类型的默认构造函数,若没有默认构造函数,则编译器尝试使用默认构造函数将会失败。 2.const 成员或引用类型的成员。 因为类型的数据成员对象在进入函数体前已经构造完成,也就是说在成员初始化列表处进行构造对象的工作,调用构造函数,在进入函数体之后,进行的是对已经构造好的对象的赋值,又调用个拷贝赋值操作符才能完成(如果并未提供 初始化列表的成员初始化顺序: C++ 初始化成员时,是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。 ?

    2.5K20发布于 2019-11-22
  • C++和对象之初始化列表

    C++初始化列表详解:性能优化与正确实践 在C++编程中,初始化列表是构造函数的重要组成部分,它不仅能提升代码性能,还能确保成员变量被正确初始化。本文将深入探讨初始化列表的语法、应用场景及最佳实践。 基初始化:正确调用父构造函数 当基没有默认构造函数时,必须通过初始化列表显式调用其带参构造函数。 . */ } // 调用基构造函数 }; 4.必须使用初始化列表的情况 在C++中,引用、const成员变量以及没有默认构造函数的类型成员变量必须在构造函数初始化列表中进行初始化,这是由它们的语义和 C++对象生命周期的规则决定的。 初始化顺序由声明顺序决定 成员变量的初始化顺序由其在中声明的顺序决定,而非初始化列表中的顺序。错误的顺序可能导致未定义行为。

    20610编辑于 2026-01-15
  • 来自专栏C++核心准则原文翻译

    C++核心准则C.48:如果构造函数需要用常数初始化成员,使用初始化器更合适

    in-class initializers to member initializers in constructors for constant initializers C.48:如果构造函数需要用常数初始化成员 ,使用初始化器更合适 Reason(原因) Makes it explicit that the same value is expected to be used in all constructors 维护人员怎么才能知道 j 是否是故意没有初始化(尽管这可能是坏主意)呢?怎么知道一种情况将s初始化为“”,而另一种情况初始化为"qqq"是有意而为之呢(这几乎就是一个错误)? 关于 j 的问题(忘了初始化某个成员)经常发生在向添加新成员的时候。 (简单)针对构造函数的默认参数使用初始化器可能是更加恰当的选择。 ---- 觉得本文有帮助?请分享给更多人。 关注【面向对象思考】轻松学习每一天! 面向对象开发,面向对象思考!

    85420发布于 2020-03-25
  • 来自专栏六月-游戏开发

    c++的数据成员初始化次序

    分享一个之前学的知识点,感觉还挺重要的,就是当一个中的某个数据成员同时拥有就地初始化、构造函数初始化列表和构造函数函数体里的赋值,那么它会先执行哪个?最后生效的又是哪个呢? 根据老师的讲解,数据成员的初始化次序依次为: 就地初始化 > 构造函数的初始化列表 >构造函数里的赋值(严格意义上不能成为初始化) 而当三种初始化方式都有时,构造函的函数体里的赋值肯定执行,并且生效 ,但是就地初始化和构造函数初始化列表的执行情况是怎样呢? ,而当调有参构造函数时,id没有执行就地初始化,而是直接执行了构造函数初始化列表。 所以当一个数据成员同时拥有就地初始化初始化列表时,它会忽略就地初始化而执行构造函数初始化列表。

    1.4K20编辑于 2022-12-26
  • 来自专栏防止网络攻击

    C++使用new来初始化指向的指针

    C++使用new来初始化的指针 1.ClassName * p = new ClassName; 调用默认构造函数。 如果类里没有写默认构造函数,会使用编译器帮我们生成的,并且会初始化成员变量,比如 int 会被初始化为 0 NoConstructor* p2 = new NoConstructor(); p2->printVal C++指针初始化问题 c++中的指针是一个很经典的用法,但是也是最容易出错的,比如定义了一个指针,必须对其进行初始化,不然这个指针指向的是一个未知的内存地址,后续对其操作的时候,会报错。 下面就总结一下c++指针初始化的一些方法,以及我自己遇到的一些问题以及心得体会。 c++指针初始化的一般方法 1.将一个已经在内存中存在变量的地址传递给定义的指针 这个指针就指向这个变量的内存地址(相同的数据类型),完成初始化

    1.2K20编辑于 2023-10-14
  • 来自专栏就业 C++ 综合学习

    C++与对象—— 初始化列表 、static 静态成员、

    在很多初始化和赋值的区别事关底层效率的问题:前者直接初始化数据成员,后者则先初始化再赋值。除了效率问题外更重要的是,一些数据成员必须初始化。 所以一般建议养成使用初始化列表的习惯,这样可以避免某些意想不到的编译错误,特别是遇到包含构造函数初始值的成员时。 初始化顺序: 显然在构造函数中每个成员只能出现一次。 需要注意的是初始化列表不限定初始化的执行顺序,因为成员初始化的顺序与他们在出现顺序一致,第一个成员先初始化,然后第二个,以此类推,因此构造函数初始化列表的前后位置并不影响实际的初始化顺序。 注意: 每个成员变量在初始化列表中只能出现一次(初始化只能一次) 中包括以下成员,必须在初始化列表进行初始化 : 引用成员变量 const成员变量 自定义类型成员(并且该类没有默认构造函数时) 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化 成员变量在中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关。

    81210编辑于 2024-02-25
  • 来自专栏zxctscl个人专栏

    C++和对象之初始化列表与static成员

    前言 在前面的博客中已经分享有关构造函数 【C++】构造函数和析构函数详解,这次又再一次提到构造函数,一起来看看。 2. 所以c++中用了初始化列表,初始化列表是每个成员变量定义初始化的位置。 下面的成员变量也会走初始化列表,他们也要定义,只是没有给值就是随机值,如果给了值就直接初始化。 这里是显示的调构造 【注意】 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次) 中包含以下成员,必须放在初始化列表位置进行初始化,不能在函数体内初始化: (1)引用成员变量 到时候初始化列表就直接用2去初始化,和上面的原因一样:同一个表达式连续步骤的构造,一般会被合二为一 成员变量在中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关。 静态成员变量一定要在外进行初始化。 面试题:实现一个,计算程序中创建出了多少个对象。 就是统计构造,构造函数调用了多少次。

    44610编辑于 2024-03-04
  • 来自专栏跟Qt君学编程

    C++初始化

    ❝在C++中int类型可以看作为一个,那么它就有以下的初始化方式。 ❞ int i; /* 默认初始化 */ int i = 0; /* 拷贝初始化 */ int i(0); /* 直接初始化 */ int *i = new int(); /* 值初始化 */ int i{0}; /* 列表初始化 */ std::vector<int> i{1, 2, 3}; /* 列表初始化 */

    38010发布于 2020-04-01
  • 来自专栏全栈程序员必看

    Java初始化顺序_java静态初始化顺序

    public static void main(String[] args) { InitializeDemo n =new InitializeDemo("初始化 "); } } 变量先分配内存并且赋值为默认值,再进行初始化变量和对象变量初始化顺序都为从上到下初始化,有变量初始化,代码块初始化,构造器初始化 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/168704.html原文链接

    1.2K10编辑于 2022-09-22
  • C++成员函数默认参数和成员变量初始化问题

    总结如下: (1)的成员变量在定义时候可以初始化,当然静态成员变量不行。 (2)的成员函数默认参数需要在头文件声明里面指定,在定义函数时候不能指定。

    18600编辑于 2025-07-20
  • 来自专栏c/c++

    C++和对象】初始化列表与隐式类型转换

    关键字使用 3.结语 1.初始化列表 1.1初始化列表定义 C++中的初始化列表是一种在对象构造函数中初始化成员变量的方法。 1.2初始化列表原因 在C++和对象中有些成员变量必须定义的时候初始化,这时候如果只是简单的使用构造函数来赋值是不可行的,所以C++引入了初始化列表这个概念; 中包含以下成员,必须放在初始化列表位置进行初始化 没有默认构造函数的类型成员变量_aobj:如果成员变量是一个类型的对象,并且该类没有默认构造函数(无参构造函数),则必须在初始化列表中调用该类的有参构造函数进行初始化。 1.3初始化列表注意点 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次) 中包含以下成员,必须放在初始化列表位置进行初始化: 引用成员变量 const成员变量 自定义类型成员(且该类没有默认构造函数时 3.结语 初始化列表是C++和对象中初始化成员变量的方式,在一些情况下可以提高效率和代码可读性。

    50910编辑于 2024-04-25
  • 来自专栏全栈程序员必看

    初始化磁盘_c++怎么初始化

    磁盘在联机后要初始化,同样也有两种方法,一种是调用IOCTL_DISK_CREATE_DISK,还有一种是调用WMI的Initialize方法。 1.首先说说简单的WMI的方法: 大致思路同博客:C++ 实现磁盘联机 先获取磁盘的id, 然后执行无参数方法Initialize 核心模块代码如下: wchar_t msftDiskObjectID GetLastError(); } CloseHandle(hFile); return retcode; } GPT磁盘类似,不同的地方在于传入的参数变成了GUID 核心代码在于CREATE_DISK结构的初始化发生了变化

    1.1K10编辑于 2022-09-29
  • 来自专栏全栈程序员必看

    C++ vector初始化_vector>初始化

    = vec.end() ; ++i) { cout << *i << " ";} cout << endl; return ; } 总结起来有以下几个:       2列表初始化,2个拷贝 当然是用迭代器初始化,可以相互转换都可以,而且不要求容器和元素类型相同。

    1.4K40编辑于 2022-10-05
  • 来自专栏小黑娃Henry

    swift底层探索 01 - 初始化&结构swift底层探索 01 - 初始化&结构

    探索路径同样是参考oc的探索路径,先从开始。 初始化 1. 使用Xcodel断点调试 ? 创建一个简单的,开启汇编断点 ? 1步骤就是__allocation_init是swift对象初始化入口 通过2步骤可以进入下一步(下断点,按住control+↓) ? swift_allocObject是初始化第二步 下断点,按住control+↓进入下一步 ? swift_slowAlloc是初始化第三步 下断点,按住control+↓进入下一步 ? ? malloc_zone_malloc是初始化第四步,在这一步完成内存的分配,最终完成alloc步骤。 2. 使用源码调试 现在通过源码调试来验证一下之前的论点。 初始化流程图 ? 结构 - HeapObject结构 1. 编译器断点 ? 在进行创建,源码调试的时候发现swift的结构是这样的。和oc比起来是有一些不同的。

    1.2K30发布于 2021-08-09
  • 来自专栏软件开发 -- 分享 互助 成长

    C++初始化列表

    一、什么是初始化列表 与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段 二、构造函数执行分为初始化和构造两个阶段,且初始化化阶段优先于计算阶段 三、一个好的原则是,能使用初始化列表的时候尽量使用初始化列表 因为初始化列表有时能少调用一次默认构造函数 四、必须要用初始化列表的时候 1.常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面 没有默认构造函数的类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化 五 、成员变量是按照在中声明的顺序被初始化的而不是在初始化列表中的顺序 struct foo 一个好的习惯是,按照成员定义的顺序进行初始化。 六、含有参数的继承初始化 代码1如下: 1 // 集成初始化实验.cpp : 定义控制台应用程序的入口点。 ):A(a2,b2,c2)的a2,b2,c2,d2,然后在将a2,b2,c2,依次赋值给13行中A(int a1,int b1,char c1) 的a1,b1,c1 将代码改变一下: 1 // 集成初始化实验

    1.1K90发布于 2018-02-05
  • 来自专栏全栈程序员必看

    C++数组初始化

    C++数组初始化 定义: int *pia = new int[10]; // array of 10 uninitialized ints 此 new 表达式分配了一个含有 10 个 int 型元素的数组 注意:C++使用new和delete在堆(自由存储区)上分配和释放动态数组。 动态数组初始化: 1. 元素只能初始化为元素类型的默认值,而不能像数组变量一样,用初始化列表为数组元素提供各不相同的初值。 2. 类型元素的数组,则无论是否使用(),都会自动调用其默认构造函数来初始化: string *psa = new string[10]; // 每个元素调用默认构造函数初始化 string *psa = 这种形式的字符串通常被称为C型字符串,因为以这样的方式定义字符串是在C语言中推出的,在C++一般使用string,而MFC中则定义了CString

    2.2K20编辑于 2022-09-09
  • 来自专栏全栈程序员必看

    C++ vector初始化_vector初始化大小

    一维向量 vector<int> vector_1D_1;//只定义向量 vector<int> vector_1D_2(n);//定义的同时初始化大小 vector<int> vector_1D_3( n,m);//定义的同时初始化大小为n,元素初始值为m //先定义变量,再初始化大小和初值 vector<int> vector_1D_4; vector_1D_4=vector<int>(n,m); x vector<vector<int> > vector_2D_5(n,vector_1D_3);//使用已知向量来初始化,第二维大小和vector_1D_3一样 三维向量 vector< vector );//仅指定第一维大小 vector< vector< vector<int> > > vector_3D_3(n,vector<vector<int>>(m,vector<int>(y)));//初始化维度大小为 n*m*y. vector< vector< vector<int> > > vector_3D_4(n,vector<vector<int>>(m,vector<int>(y,x)));//初始化维度大小为

    1.4K10编辑于 2022-11-04
领券