ctor-initializer相关内容

成员初始化器列表和非静态数据成员的默认成员初始化器有什么区别?

我想了解使用一种形式而不是另一种形式(如果有的话)的区别. 代码1(直接在变量上初始化): #include 使用命名空间标准;类测试{上市:测试() {cout 代码 2(在构造函数上初始化列表): #include 使用命名空间标准;类测试{上市:测试():计数(10){cout 语义上有什么区别,还是只是句法上的区别? 解决方案 ..
发布时间:2022-01-18 23:53:55 C/C++开发

初始化器列表 *argument* 评估顺序

因此,C++ 标准要求类成员按照它们在类中声明的顺序进行初始化,而不是按照它们在任何构造函数的初始化列表中的顺序进行初始化.但是,这并不意味着评估这些初始化的参数的顺序.我正在使用一个经常传递对序列化对象的引用的系统,并且想知道我是否可以确保以正确的顺序从中读取位,而与这些位写入对象字段的顺序无关. struct Foo {诠释一个;双乙;//我希望能够做到这一点Foo(SerObj &s): ..

初始化列表*参数*评估顺序

因此,C++ 标准要求类成员按照它们在类中声明的顺序进行初始化,而不是按照它们在任何构造函数的初始化列表中提到的顺序进行初始化.但是,这并不意味着对这些初始化的参数进行评估的顺序有任何关系.我正在使用一个经常传递对序列化对象的引用的系统,我想知道是否可以确保以正确的顺序从中读取位,而与这些位写入对象字段的顺序无关. struct Foo {一个;双 b;//我希望能够做到这一点Foo(SerOb ..

如何在构造函数中初始化 const 字段?

想象一下,我有一个 C++ 类 Foo 和一个类 Bar,它们必须用一个构造函数来创建,在该构造函数中传递了一个 Foo 指针,并且这个指针在 Bar 实例生命周期中保持不变.正确的做法是什么? 事实上,我以为我可以像下面的代码那样写,但它不能编译.. class Foo;类栏{上市:foo * const foo;酒吧(富*富){这-> foo = foo;}};类 Foo {上市:一个 ..
发布时间:2021-12-30 15:10:24 C/C++开发

为什么派生类的构造函数要在C ++中初始化虚拟基类?

我的理解,例如阅读这,是派生类的构造函数不会调用其虚拟基类的构造函数. 这是我做的一个简单示例: A类{受保护的:A(int foo){}};B类:公共虚拟A {受保护的:B(){}};C类:公共虚拟A {受保护的:C() {}};D类:公共B,公共C {上市:D(int foo,int bar):A(foo){}};int main(){返回0;} 出于某种原因,构造函数 B :: ..
发布时间:2021-04-24 19:23:55 C/C++开发

为什么除非大多数派生基显式调用它们,否则不调用虚拟基非默认构造函数?

我想了解WHY C ++标准的要求,即虚拟基础非默认构造函数不能由非最衍生的中间层调用 此类代码中的类,当使用'-D_WITH_BUG_'编译时: /* A virtual base's non-default constructor is NOT called UNLESS * the MOST DERIVED class explicitly invokes it */ #i ..

从构造函数初始化程序引发异常

从构造函数初始值设定项引发异常的最佳方法是什么? 例如: Class C { T0 t0; //可以是有效或无效,但不会直接抛出 T1 t1; //重对象,如果t0无效,则不要构造,方法是在 之前抛出C(int n) :t0(n),//如果t0(n)无效,则抛出异常 t1(){} }; 我想也许可以做包装纸,例如 t0(throw_if_invalid(n) ..
发布时间:2020-06-10 23:22:16 C/C++开发