这条线如何运作? 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();
}
答案 0 :(得分:0)
Static local variable只会在控件第一次通过声明时初始化,并且只会调用一次,因此WillOnlyRunOnce()
也只会被调用一次。
在块作用域中使用指定符static声明的变量具有静态存储持续时间,但在控件第一次通过其声明时初始化(除非它们的初始化为零或初始化初始化,这可以在首次输入块之前执行) 。 在所有进一步的调用中,将跳过声明。
答案 1 :(得分:0)
unused
仅初始化一次。它被初始化为(WillOnlyRunOnce(), true)
评估为的任何内容。
(WillOnlyRunOnce(), true)
是逗号运算符的表达式。第一个表达式的值是WillOnlyRunOnce()
返回的值。第二个表达式的值为true
。整个表达式的值是最后一个表达式的值。在这种情况下,它是true
。
初始化unused
后,其值不会重置。因此,(WillOnlyRunOnce(), true)
不会被评估多次。因此,即使多次调用WillOnlyRunOnce
,Init
也只会被调用一次。