我在学习C++的过程中遇到了一个问题,一个函数中的局部变量被传递给另一个函数中同名的局部变量,这两个函数都运行在main()中。
运行时,
#include <iostream>
using namespace std;
void next();
void again();
int main()
{
int a = 2;
cout << a << endl;
next();
again();
return 0;
}
void next()
{
int a = 5;
cout << a << endl;
}
void again()
{
int a;
cout << a << endl;
}
它输出:
2
5
5
我预计 again() 会说 null 或 0,因为 'a' 在那里再次被声明,但它似乎使用了 'a' 在 next() 中分配的值。
如果再次在 again() 中声明了 'a',为什么 next() 会将局部变量 'a' 的值传递给 again()?
最佳答案
http://en.cppreference.com/w/cpp/language/ub
您是对的,未初始化的变量是不可取的。但是,您可以先声明一个变量,然后再对其进行初始化。内存被预留用于保存整数,但是在您这样做之前,该内存中恰好有什么值可以是任何值。有些编译器会将变量自动初始化为垃圾值(以帮助您捕获错误),有些会自动初始化为默认值,有些则什么都不做。 C++ 本身没有任何 promise ,因此它是未定义的行为。在您的情况下,使用您的简单程序,很容易想象编译器如何创建汇编代码来重用完全相同的内存而不改变它。然而,这是盲目的运气,即使在您的简单程序中也不能保证会发生。这些类型的错误实际上可能相当隐蔽,因此请定下一条规则:警惕未初始化的变量。
关于c++ - 传递的局部变量 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36168918/