我遇到了this question询问如何在 C 中的 main() 之前执行代码,提到 C++ 有策略。我大部分时间都生活在应用程序空间中,因此我从未想过在 main() 之前执行。什么样的事情需要这种技术?
最佳答案
“什么样的事情需要这种技术?”
事实:无。
但是,由于各种原因,您可能希望在 main 之前做很多有用的事情。举一个实际的例子,假设你有一个构建 doohickies 的抽象工厂。您可以确保构建工厂实例,将其分配到某个特殊区域,然后将各种具体的 doohickies 注册到它...是的,您可以这样做。
另一方面,如果您将工厂实现为单例,并使用全局值初始化的事实来“欺骗”实现在 main 启动之前注册具体的 doohickies,您可以获得几个好处而成本非常低(使用单例,在这里基本上不是问题,几乎是唯一的)。
例如你:
不必维护所有必须显式调用的注册列表。事实上,您甚至可以在私有(private)范围内声明和定义整个类,在任何人都看不见的情况下,并使其在程序启动时可供使用。
main() 不必对一堆它不关心的对象做一堆废话。
所以,这些实际上都不是必要的。但是,如果您利用全局变量在 main 开始之前初始化的事实,则可以减少耦合和维护问题。
编辑:
在此应注意,我已经了解到语言无法保证这一点。 C++ 只保证 zero 或 constant 初始化发生在 main 之前。我在这个答案中谈论的是 dynamic 初始化。这种 C++ 保证发生在第一次使用变量之前,很像函数局部静态变量。
每个编译器似乎都在 main 之前进行动态初始化。我以为我遇到过一次,但我相信问题的根源是别的。
关于c++ - 在 main() 之前可能需要做什么样的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4881042/