功能执行一次

时间:2016-04-01 03:12:42

标签: c++

这条线如何运作? static bool const unused = (WillOnlyRunOnce(), true)

我偶然发现了一段与此类似的代码,我无法理解。

void WillOnlyRunOnce() {
    std::cout << "WillOnlyRunOnce" << std::endl;
}
void Init() {
    static bool const unused = (WillOnlyRunOnce(), true);
}
void main()
{
    Init();
    Init();
    Init();
}

2 个答案:

答案 0 :(得分:0)

Static local variable只会在控件第一次通过声明时初始化,并且只会调用一次,因此WillOnlyRunOnce()也只会被调用一次。

  

在块作用域中使用指定符static声明的变量具有静态存储持续时间,但在控件第一次通过其声明时初始化(除非它们的初始化为零或初始化初始化,这可以在首次输入块之前执行) 。 在所有进一步的调用中,将跳过声明。

答案 1 :(得分:0)

程序运行时,

unused仅初始化一次。它被初始化为(WillOnlyRunOnce(), true)评估为的任何内容。

(WillOnlyRunOnce(), true)是逗号运算符的表达式。第一个表达式的值是WillOnlyRunOnce()返回的值。第二个表达式的值为true。整个表达式的值是最后一个表达式的值。在这种情况下,它是true

初始化unused后,其值不会重置。因此,(WillOnlyRunOnce(), true)不会被评估多次。因此,即使多次调用WillOnlyRunOnceInit也只会被调用一次。