C++ 为什么不能在不初始化新变量的情况下全局调用函数?

问题描述 投票:0回答:1

如果我必须在全局范围内运行函数,例如为了填充多个 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 文件中本地可见,但这仍然不是一个好的编码风格。

c++ static-methods global-scope
1个回答
0
投票

每次调用这样的函数时,我也必须初始化一个新变量

TU 不需要几个变量,只需要一个就足够了:

static bool bDummy1 = foo();
static bool bDummy2 = foo2();

可以替换为

static bool bDummy = foo(), foo2();

为什么在不初始化新变量的情况下无法全局调用函数?

gcc/clang 有

__attribute__ ((constructor))
来解决这个问题

演示

© www.soinside.com 2019 - 2024. All rights reserved.