写入全局变量的顺序

RDX*_*RDX 4 c++ constructor global-variables

在下面的程序中,我调用一个函数foo()来设置一个全局变量i ,然后调用构造函数class A,其中i也应该设置,但是10.但是我的程序输出是3 0,你能解释一下吗?

#include <iostream>

int i;

class A
{
    public:
        ~A()
        {
            i=10;
        }
};

int foo()
{
    i = 3;
    A ob;
    return i;
}

int main()
{

    std::cout << "i = " << foo() << " " << i << "\n";
}
Run Code Online (Sandbox Code Playgroud)

Alo*_*ave 5

这里有两点需要考虑:

函数参数的评估顺序是Unspecified.所以要么:

  • foo() 首先执行或执行
  • i 首先打印

它特定于您的编译器.看起来你的编译器从右到左评估参数,因此得到的全局i0被评估为0.请记住,对于其他编译器,此顺序可能不同,您不应该依赖于一个实现的行为.

至于为什么3ob函数返回后调用析构函数.因此在返回之后i设置为10,返回的是副本,并且该副本具有值3.