首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏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 使用初始化器可以让编译器为你生成一个函数。编译器生成的函数效率更高。 (简单)默认构造函数应该比使用常量初始化数据成员做的更多。 译者注:差不多就是杀鸡焉用牛刀的意思。

    79800发布于 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++11属性成员的初始化

    在C++11中,大多数的基础数据类型都可以直接初始化,可以不通过构造函数来初始化。还有一些仍旧是初始化。由于可能存在对C++11支持的程度不同,以及编译器厂商是否对C++进行了扩展。 std; class MyClass { public: static const int a = 3; const double b = 3.14; //为了保持静态属性成员是属于整个的 ,C++11的做法和以前一样,依旧在外定义并初始化 static int c; //声明c double d = 100.001; char str[33] = "Hello World!" 这样的初始化方式写起来也非常顺畅,比旧标准好得多。 学习新的标准是非常有用的,这样最重要的是能让你避免对新的代码产生一些误判。 在Microsoft Visual Studio Community 2019中,其实已经支持了C++14,C++17以及C++最新的草案标准 ?

    1.2K10发布于 2020-03-31
  • C++和对象之初始化列表

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

    21310编辑于 2026-01-15
  • 来自专栏C++/Linux

    C++修炼之路】11. list

    _col<<endl; ++it; } 但事实上,我们在C/C++中有另一种方式:->即直接it->_row;下面的Ptr就是。 const list<T>& lt) //list(const list& lt) 官方库是这样写的,也可以,语法设计问题,但是不建议自己这样写 { empty_initialize();//初始化头结点 // 名和类型的问题: // 普通 名 等价于 类型 // 模板 名 不等价于 类型 // 如: list模板 名list 类型list<T> // 模板里面可以用名代表类型,但是不建议那么用 C++/list模拟实现最终版 · 蓝桉/CPP - 码云 - 开源中国 (gitee.com) 4. : 名等价于类型 模板: 名不等于类型 举例:list模板名为list,但是实际上的类型是list<T>,这两个在具体函数返回值还是有区别的,但是在模板里面可以直接用名来代替类型,不过不建议这么用

    49000编辑于 2023-03-28
  • 来自专栏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 的问题(忘了初始化某个成员)经常发生在向添加新成员的时候。 (简单)针对构造函数的默认参数使用初始化器可能是更加恰当的选择。 ---- 觉得本文有帮助?请分享给更多人。 关注【面向对象思考】轻松学习每一天! 面向对象开发,面向对象思考!

    86720发布于 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成员变量 自定义类型成员(并且该类没有默认构造函数时) 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化 成员变量在中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关。

    82110编辑于 2024-02-25
  • 来自专栏游戏开发司机

    C++:11---友元函数、友元

    一、友元(friend) 概念:通过友元,打破了的封装性,可以访问的所有成员 分类:友元函数、友元 二、友元函数 概念:友元函数是一个普通函数,不属于,但需要在表明友元关系 友元函数可访问所有成员,但不可以访问友元函数内部数据 格式 友元函数可以在声明时,需要加上关键字friend 友元函数可以在外声明,外定义。 友元也不属于成员,不拥有this指针 一个A成为另一个B的友元时,A就可以访问B的所有成员 友元的形式分为两种 使整个成为友元 使中的某一部分函数成为友元 使整个成为友元 class Cb;//声明 class Ca { private: int num; public: friend class Cb; //使整个成为Ca的友元,则Cb所有的成员都可以访问Ca的所有成员 }; 四、友元特点 单方向性:即友元可访问,但是不能访问友元 不传递性:A是B的友元,C是A的友元,但C不是B的友元 不继承:在上面的友元中有介绍 ?

    78720发布于 2021-02-03
  • 来自专栏C语言学习

    C++篇】C++11的新功能

    在C++11之前,默认成员函数有6个: 构造函数 析构函数 拷贝构造函数 拷贝赋值重载 取地址重载 const 取地址重载 后两个不重要,因为一般从不需要我们自己实现。 C++11 新增了两个:移动构造函数和移动赋值运算符重载。 我们知道,在深拷贝的中是需要它们的,而在浅拷贝的中并不需要它们。 那么: 如果我们不自己实现,编译器默认生成的会干些什么事呢? 强制生成默认函数的关键字default 如果我们中实现了析构函数或者拷贝构造或者拷贝赋值重载,还想要编译器给我们生成默认的移动构造或移动重载,可以用关键字default,强制编译器为我们生成。 在C++11中更简单,只需在该函数声明加上=delete即可,该语法指示编译器不生成对应函数的默认版本,称=delete修饰的函数为删除函数。

    14610编辑于 2025-08-11
  • C++进阶之C++11》【列表初始化 + 右值引用】

    往期《C++初阶》回顾: 《C++初阶》目录导航 往期《C++进阶》回顾: /------------ 继承多态 ------------/ 【普通/模板的继承 + 父&子类的转换 自定义类型: 对于自定义,只要定义了合适的构造函数,就可以使用列表初始化 如果类定义了默认构造函数和多个参数的构造函数,C++11 引入了 聚合 的概念,聚合可以直接使用列表初始化 ,C++11 在此基础上进行了大幅扩展和统一,让更多类型(比如:标准库容器、复杂自定义等 )都能使用类似简洁的 {} 语法初始化 并且优化了很多初始化逻辑和特性 ,后续 C++ 标准不断完善,让初始化操作变得更灵活 C++11 initializer_list:容器批量初始化的解决方案 问题背景:容器初始化的痛点 虽然 C++ 列表初始化({})让语法更简洁,但早期直接用 {} 初始化容器(如:vector )仍有不便 解决方案:std::initializer_list 为统一容器的批量初始化,C++11 引入 std::initializer_list

    19110编辑于 2025-12-18
  • 来自专栏C++开发

    C++课程学习】:C++11C++发展,列表初始化,声明auto,typeid,decltype)

    1983年,在C语言的基础上增加了面向对象编程的特性,设计了C++的雏形,此时已经具备了、封装、继承等核心概念,后来正式更名为C++。 虽然在标准中增加STL是个很重要的决定,但也因此延缓了C++标准化的进程。 1997年11月14日,联合标准化委员会通过了C++标准的最终草案。 以下是一些主要的变化: ●C++98:C++语言的第一个正式标准版本,包含了许多重要的特性,如和对象、继承、虚函数和多态、封装、抽象、模板、异常处理、标准模板库(STL)、命名空间等。 1.2C++11: C++98是C++第一版的标准,C++03是对C++98中漏洞进行修复,C++11增加很多的新特性,和C++98/03有很大的区别了。 2.1{}初始化: 原来的数组初始化等,用={}进行初始化,比如int a1[2]={1,2};这样的初始化方式。在C++11中,可以直接这样初始化。 一切都可以用列表初始化,并且可以省略=。

    33500编辑于 2025-01-20
  • 来自专栏zxctscl个人专栏

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

    前言 在前面的博客中已经分享有关构造函数 【C++】构造函数和析构函数详解,这次又再一次提到构造函数,一起来看看。 2. 所以c++中用了初始化列表,初始化列表是每个成员变量定义初始化的位置。 下面的成员变量也会走初始化列表,他们也要定义,只是没有给值就是随机值,如果给了值就直接初始化。 这里是显示的调构造 【注意】 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次) 中包含以下成员,必须放在初始化列表位置进行初始化,不能在函数体内初始化: (1)引用成员变量 C++11支持多参数 举个例子: class A { public: A(int a1, int a2) :_a1(a1) ,_a2(a2) {} private: int _a1; 静态成员变量一定要在外进行初始化。 面试题:实现一个,计算程序中创建出了多少个对象。 就是统计构造,构造函数调用了多少次。

    45610编辑于 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}; /* 列表初始化 */

    38610发布于 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/c++

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

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

    51710编辑于 2024-04-25
  • C++成员函数默认参数和成员变量初始化问题

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

    19200编辑于 2025-07-20
领券