如果我必须在全局范围内运行函数,例如为了填充多个 cpp 文件中的静态容器,那么每次调用这样的函数时,我也必须初始化一个新变量,即使我不需要它们。 这是此类虚拟变量的简化示例。
static bool foo() { /*some code*/ return true; }
static bool foo2() { /*some code*/ return true; }
static bool bDummy1 = foo();
static bool bDummy2 = foo2();
从技术上讲,bDummy1 和 bDummy2 是多余的,但由于 C++ 语法,它仍然是必需的。为什么没有其他办法解决这个问题呢? 我知道创建此类多余变量的开销非常小,并且“static”关键字使它们仅在 cpp 文件中本地可见,但这仍然不是一个好的编码风格。
每次调用这样的函数时,我也必须初始化一个新变量
TU 不需要几个变量,只需要一个就足够了:
static bool bDummy1 = foo();
static bool bDummy2 = foo2();
可以替换为
static bool bDummy = foo(), foo2();
为什么在不初始化新变量的情况下无法全局调用函数?
gcc/clang 有
__attribute__ ((constructor))
来解决这个问题