为什么这个 c++ 程序的输出是 3.
Why the output of this c++ program is 3
#include <iostream>
using namespace std;
int i;
class A
{
public:
~A()
{
i=10;
}
};
int foo()
{
i=3;
A ob;
return i;
}
int main()
{
cout << "i = " << foo() << endl;
return 0;
}
输出是 3,为什么不是 10。
因为析构函数在概念上是在块出口处运行的。
所以ob
是在foo
中间建造的,但在从foo
回来时被摧毁了
当您初始化析构函数时,在您的情况下,对象的析构函数是在销毁之前调用的,即在 foo 的执行完成之前。由于 i 在调用 foo(( 时等于 3,因此得到 3。它仅在调用析构函数之后 * 等于 10。如果这样做,您可能可以观察析构函数的行为并理解:
class A
{
public:
~A()
{
i=10;
cout << "In destructor function, i = " << i<< endl;
}
};
在析构函数中设置i = 10
的值。析构函数在块出口中被调用。
所以在你的代码中,在 foo()
中return i;
后,当块退出时,i 的值被设置为 10。
在cout
语句中,你打印的不是i
的值,而是函数foo()
的返回值,所以它给出3;
cout << "i = " << foo() << endl; // gives result 3
cout << "i = " << i << endl; // gives result 10
您正在设置
I 到 10 仅在析构函数中。因此,当您打印在销毁对象之前从函数返回的 i 值时,对象 ob 仍然有效。
一旦你返回 i 的当前值,它就不再隶属于全局变量,它只是一个在返回时具有 i 值的副本。然后析构函数可以更改它喜欢的任何内容,复制的值被冻结
int foo()
{
i=3;
A ob;
return i;
}
在我们到达}
之前遇到了return
语句在调用将变量值设置为 10
的析构函数之前,已经估计了return
值
~A()
如果没有~
我就i=10
相关文章:
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 显示错误输出的简单数组排序程序
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 如何从Windows应用程序输出到标准?
- 我写了一个C++程序来模拟Enigma机器.我没有得到输出
- 如何使用C++读取另一个程序中的源代码输出
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 为什么这个程序的输出不如预期
- 在由Sublime文本3编译后在cmd上显示Java程序输出
- C++ 每次运行程序时我都会"nan"输出的问题
- 如何从 Win32 C++ 应用程序输出到父控制台窗口?
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 而循环:简单的除法程序输出零,不明白为什么
- 如何在 html 页面中插入 cgi 应用程序的输出?
- C 中的输出程序无明显的原因是白色的
- C++:更改简单输出程序的字体
- C++ 简单的输入/输出程序 + 枚举器
- C++字母等效数字代码输出程序
- 编译输出程序集