c++ - 在 main() 之前可能需要做什么样的操作

标签 c++ c program-entry-point

我遇到了this question询问如何在 C 中的 main() 之前执行代码,提到 C++ 有策略。我大部分时间都生活在应用程序空间中,因此我从未想过在 main() 之前执行。什么样的事情需要这种技术?

最佳答案

“什么样的事情需要这种技术?”

事实:无。

但是,由于各种原因,您可能希望在 main 之前做很多有用的事情。举一个实际的例子,假设你有一个构建 doohickies 的抽象工厂。您可以确保构建工厂实例,将其分配到某个特殊区域,然后将各种具体的 doohickies 注册到它...是的,您可以这样做。

另一方面,如果您将工厂实现为单例,并使用全局值初始化的事实来“欺骗”实现在 main 启动之前注册具体的 doohickies,您可以获得几个好处而成本非常低(使用单例,在这里基本上不是问题,几乎是唯一的)。

例如你:

  1. 不必维护所有必须显式调用的注册列表。事实上,您甚至可以在私有(private)范围内声明和定义整个类,在任何人都看不见的情况下,并使其在程序启动时可供使用。

  2. main() 不必对一堆它不关心的对象做一堆废话。

所以,这些实际上都不是必要的。但是,如果您利用全局变量在 main 开始之前初始化的事实,则可以减少耦合和维护问题。

编辑:

在此应注意,我已经了解到语言无法保证这一点。 C++ 只保证 zeroconstant 初始化发生在 main 之前。我在这个答案中谈论的是 dynamic 初始化。这种 C++ 保证发生在第一次使用变量之前,很像函数局部静态变量。

每个编译器似乎都在 main 之前进行动态初始化。我以为我遇到过一次,但我相信问题的根源是别的。

关于c++ - 在 main() 之前可能需要做什么样的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4881042/

相关文章:

c++ - 为什么我不能使外部类型看起来像 C++ 中的内部类型?

c++ - vector +for+if

c++ - 附加随机访问文件

c - 查找此输出的逻辑

java - main 内部私有(private)属性访问背后的想法是什么? Java x C++

c++ - 在 Windows 平台上为 c/c++ 代码生成调用图的工具?

计算幂 : how to test for values that exceed INT_MAX or INT_MIN?

无法在循环中连续获取字符

java - 包中的 Main 类?

c++ - 由于 int main() 函数的定义错误,C++ 编译器拒绝了我的代码