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)
这里有两点需要考虑:
函数参数的评估顺序是Unspecified.所以要么:
foo() 首先执行或执行 i 首先打印 它特定于您的编译器.看起来你的编译器从右到左评估参数,因此得到的全局i值0被评估为0.请记住,对于其他编译器,此顺序可能不同,您不应该依赖于一个实现的行为.
至于为什么3?ob函数返回后调用析构函数.因此在返回之后i设置为10,返回的是副本,并且该副本具有值3.
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |