【发布时间】:2012-01-16 00:52:56
【问题描述】:
例子:
struct Foo { Foo() { printf("foo\n"); } };
static Foo foo;
__attribute__((constructor)) static void _bar() { printf("bar\n"); }
首先打印foo 还是bar 是否具有确定性?
(我希望并且期望静态对象的构造函数总是首先执行但不确定,关于构造函数属性的 GCC 文档没有说明任何内容。)
【问题讨论】:
-
你在哪里使用这种编译器功能??
-
@AlexTheo:这很常见。参见例如codesearch.google.com/#search/…>。您通常在每次想要初始化某些东西时使用它。
-
实际上我更喜欢 static const bool _isInitialized 之类的东西,并制作一个私有初始化函数,用它来初始化我的对象,例如 const bool MyClass::_isInitialized = initFunction();但这些仅适用于我喜欢首先初始化的对象。否则构造函数应该做的工作。
-
@AlexTheo 这种方法在 C 中不起作用。当然您可以在 C++ 中使用构造函数,但这与 C 中的静态初始化器具有相同的效果。
-
@nevelis 我们在谈论 C++!!!
标签: c++ gcc static-initialization