繁体   English   中英

使用本地静态变量调用函数

[英]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()有副作用。 副作用是无法通过其返回值测量的函数的结果。 在这种情况下,副作用是修改静态变量。 如果函数没有副作用(或者如果你调用多个函数没有重叠的副作用),那么首先调用哪个函数不会改变任何东西。

之前有人问过/回答: 这里有什么问题? 关联? 评估顺序? 如何改变秩序?

并非所有运算符都是用C ++命令的。 该链接有一个很好的解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM