81得票6回答
C++静态初始化顺序

在C++中使用静态变量时,通常会想要通过将一个变量传递给其构造函数来初始化另一个变量。换句话说,我想创建依赖于彼此的静态实例。 在单个.cpp或.h文件中,这不是问题:实例将按照声明的顺序创建。然而,当您想要使用另一个编译单元中的实例初始化静态实例时,似乎无法指定顺序。结果就是,取决于天气,...

65得票4回答
这个自初始化方式是否有效?

我有一个问题,之前思考过,但认为回答并不简单int x = x + 1; int main() { return x; } 我的问题是,如果程序是有效的,那么它的行为是否被定义或未定义?如果被定义了,main函数中的x的值是否已知?

34得票2回答
构造函数初始化列表中的函数调用是否按顺序执行?

请考虑: int f () { static int i = 0; return i++; } struct Test { int a, b; Test () : a(f()), b(f()) {} }; Test t; 我知道由于它们在struct中...

21得票1回答
为什么C++强制要求成员变量的初始化顺序必须按照声明的顺序进行?

我知道在C++中,类头中成员的声明定义了初始化顺序。你能告诉我为什么C++选择这种设计吗?强制初始化顺序是否有益,而不是遵循初始化列表?

16得票5回答
C++: 构造和初始化顺序保证

我对C++中的构造和初始化顺序保证有一些疑问。例如,以下代码有四个类X、Y、Z和W。主函数实例化一个class X对象,它包含一个class Y对象,并从class Z派生,因此两个构造函数都将被调用。此外,传递给X构造函数的const char*参数将隐式转换为class W的对象,因此还必...

10得票4回答
使用初始化部分进行模块注册是个好主意吗?

我正在寻找一个去中心化模块注册的好方案。 我不想使用项目的所有模块单元的单个单元,而是更愿意让模块单元自行注册。 我能想到的唯一解决方案是依赖于 Delphi 单元的初始化。 我已经编写了一个测试项目: Unit2TForm2 = class(TForm) private clas...

9得票1回答
单个TU中内联变量的静态初始化顺序

我知道这个问题已经被问了很多遍,但这似乎是一个稍微不同的变化,我无法解决。 考虑以下代码: #include <cstdio> struct TestValue; inline const TestValue* v_ptr = nullptr; struct TestVa...

8得票1回答
在作为静态成员包含在另一个类中的类的构造函数中使用cout。

以下是代码: #include <iostream> struct A { A() { std::cout << std::endl; } }; struct B { static inline A a; }; int m...

7得票1回答
从全局对象的构造函数调用std::atexit的顺序

cppreference关于std::atexit的说明: 这些函数可以与具有静态存储期的对象的销毁和彼此同时调用,保证如果A的注册在B之前,则对B的调用在对A的调用之前被排序,静态对象构造函数和对atexit的调用之间的排序也适用于此。 我理解这段话的意思是,如果在静态初始化期间调用...

7得票1回答
一个 constinit 对象的析构函数何时被调用?

通常认为静态对象的析构函数是按照构造函数相反的顺序调用的。根据我的理解,constinit 对象在编译时初始化,因此它们的析构函数应该在“普通”静态对象的析构函数之后调用。 程序: struct A { constexpr A(const char* t): t_(t) {} ~A...