initialization-order相关内容

如果析构函数有副作用,并且对象是从另一个静态对象的析构函数访问的,该如何进行静态反初始化?

有一个简单且众所周知的模式可以避免静态初始化失败,如section 10.13 of the C++ FAQ Lite中所述。 在此标准模式中,存在一种权衡,要么构造的对象永远不会被析构(如果析构函数没有重要的副作用,这不是问题),要么不能从另一个静态对象的析构函数安全地访问静态对象(参见section 10.14 of the C++ FAQ Lite)。 所以我的问题是:如果一个静 ..

C++:构造和初始化顺序保证

我对 C++ 中的构造和初始化顺序保证有一些疑问.例如,下面的代码有四个类X、Y、Z 和W.main函数实例化了一个class X的对象,其中包含了一个class Y的对象,并且派生自class Z,所以两个构造函数都是叫.另外,传递给X的构造函数的const char*参数会隐式转换为class W的对象,所以W 的构造函数也必须被调用. C++ 标准对复制构造函数的调用顺序有哪些保证?或 ..
发布时间:2021-12-30 15:23:14 C/C++开发

静态存储中的内联变量何时初始化?

C ++标准(至少早于C ++ 17)已经说明了有关初始化顺序. 具有在相同翻译单元中的名称空间范围内定义并动态初始化的具有静态存储持续时间的对象,应按照其定义在翻译单元中出现的顺序进行初始化. C ++ 17引入了内联变量,我认为这是指具有静态存储持续时间的单个变量和命名空间范围和动态初始化可以在多个翻译单元中定义. C ++是否可以保证这些变量的初始化顺序? 解决方案 ..
发布时间:2021-04-20 18:59:55 C/C++开发

初始化顺序问题

给定代码示例: B类{ //一些内容。 } class C { private: B& b; } A类{ private: B b; C c; } 类C具有对b的引用,因此需要使用它进行初始化。 A类包含B的实例和C的实例。 我的问题是:我可以用A中的B实例初始化A中的C实例打扰构造函数)?第二,我需要在A中执行B的任何显式初 ..
发布时间:2016-10-24 16:44:17 C/C++开发

初始化顺序问题

给定代码示例: B类{ //一些内容。 }; class C { private: B& b; }; A类{ private: B b; C c; }; 类C具有对b的引用,因此需要使用它进行初始化。 A类包含B的实例和C的实例。 我的问题是:我可以用A中的B实例初始化A中的C实例打扰构造函数)?第二,我需要在A中执行B的任何 ..
发布时间:2016-10-24 16:40:26 C/C++开发

初始化顺序问题

给定代码示例: B类{ //一些内容。 }; class C { private: B& b; }; A类{ private: B b; C c; }; 类C具有对b的引用,因此需要使用它进行初始化。 A类包含B的实例和C的实例。 我的问题是:我可以用A中的B实例初始化A中的C实例打扰构造函数)?第二,我需要在A中执行B的任何 ..
发布时间:2016-10-24 15:34:03 C/C++开发

C ++:构造和初始化顺序保证

我对C ++中的构造和初始化顺序保证有一些疑问。例如,下面的代码有四个类 X , Y , Z 和 W 。主函数实例化一个 class X 的对象,该对象包含 Y类的对象,并从 class Z ,因此两个构造函数都将被调用。另外,传递给 X 的 const char * 参数将被隐式转换为 class W ,因此 W 的构造函数也必须被调用。 C ++标准对复制构造函数的调用顺序有什么保证?或 ..
发布时间:2016-10-14 10:49:01 C/C++开发

这个自初始化有效吗?

我有这个问题,我以前想过,但认为这不是微不足道的回答 int x = x + 1; int main(){ return x; } 我的问题是程序的行为是定义还是未定义在所有。如果它被定义,是 x 在 main 中已知的值? 解决方案 我确定它是定义的,x应该有值1.§3.6.2/ 1说:具有静态存储持续时间(3.7.1)的对象在任何其他初始化之前应该被 ..
发布时间:2016-10-11 21:18:18 C/C++开发

C ++静态初始化顺序

当我在C ++中使用静态变量时,我最终想要初始化一个变量传递给它的构造函数。换句话说,我想创建依赖于彼此的静态实例。 在单个.cpp或.h文件中,这不是问题:实例将按照声明的顺序创建。但是,当您想要在另一个编译单元中使用实例初始化静态实例时,似乎无法指定该顺序。结果是,根据天气,可能发生构建依赖于另一个的实例,并且之后才构造另一个实例。结果是第一个实例被初始化不正确。 有谁知道如何确保 ..