[英]Call function with local static variable
假设我们使用本地静态变量具有最简单的函数:
int f()
{
static int a = 0;
return ++a;
}
让我们多次调用此函数并打印结果:
int main()
{
int a = f();
int b = f();
std::cout<<a<<b;
}
输出为“12” - 正如预期的那样。 但是这个电话
int main()
{
std::cout<<f()<<f();
}
产生相反的顺序 - “21” 。 为什么?
因为在复合语句中执行函数的顺序是未定义的。 这意味着在std::cout<<f()<<f()
行结束时,保证两次调用f()
,并保证打印出两个结果,但结果是第一个没有定义,可以在编译器之间变化。
有区别因为f()
有副作用。 副作用是无法通过其返回值测量的函数的结果。 在这种情况下,副作用是修改静态变量。 如果函数没有副作用(或者如果你调用多个函数没有重叠的副作用),那么首先调用哪个函数不会改变任何东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.