只初始化部分函数一次
Initializing part of function only once
我有一个很小的函数,我想初始化一次,例如
void SomeFunc()
{
static bool DoInit = true;
if (DoInit)
{
CallSomeInitCode();
DoInit = false;
}
// The rest of the function code
}
如果多次调用此函数,则会留下一个不必要的if (DoInit)
,无法进行优化。为什么不在构造函数这样的地方初始化呢?因为,从逻辑上讲,这个初始化代码最适合这个函数,这样更容易维护,尽管它每次都会做不必要的检查。
有没有更好的方法来做到这一点,而不诉诸于使用上面的例子中的结构?
您可以通过构建一个在其构造函数中调用初始化代码的类来实现,如下所示:
class InitSomething {
public:
InitSomething() {
CallSomeInitCode();
}
};
现在你可以这样做:
void SomeFunc() {
static InitSomething myInitSomething;
...
}
对象只构造一次,只执行一次CallSomeInitCode
。
相关文章:
- 为什么 zlib 放气初始化调用一次不起作用?
- 有没有办法一次声明相同类型的多个对象,并通过一个表达式立即使用相同的右值初始化它们?
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- (C++)for循环中的空初始语句是否保存所有编译器中变量的上一次初始化
- Windows 上的 Clang/LLVM 7 和 8 多次初始化内联静态数据成员(使用 link.exe 和 lld-
- 如何在 constexpr 构造函数中初始化矩阵一次?
- 为什么调用 cout.operator<<(const char*) 打印地址而不是字符串? 如何创建一个函数本地静态"HashSet<char>"并初始化它一次?
- 静态变量可以多次初始化吗?
- 确保我们仅一次和一次初始化每个变量
- 如何请求输入以一次初始化多个结构
- 当一个数组在c++中被多次初始化时会发生什么
- cocos2d-x中变量的一次初始化
- 一次初始化所有结构变量
- OpenGL缓冲两次初始化
- 尝试为特征矩阵实现一种初始化列表语法
- 为什么c++ 11允许第二次初始化
- const char数组多次初始化c++
- 为什么第二次初始化工作,而第一次初始化由于"element type does not match"而失败?
- 静态变量是否会经历多次初始化
- 为什么我不能在c++中一次初始化3个默认参数