c++ - 传递的局部变量 (C++)

标签 c++ local-variables

我在学习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/

相关文章:

javascript - javascript 是否实现词法作用域?

c++ - C++ 中的局部变量通常在什么时候分配内存?

c++ - 重载函数的调用不明确(两个函数在不同的范围内)

c++ - 如何使用指针从不同的函数访问局部变量?

javascript - 如果存在局部窗口变量,如何访问全局窗口变量?

java - Xposed 访问函数中的变量

c++ - const 正确性

c++ - 从 std::map 中找到具有最大值的元素

c++ - OpenMPI 上的线程应用程序仅在节点上使用 1 个内核

c++ - 在 dll 中解析外部符号