传递引用需要具有初始值

Pass by reference need to have initial value?

本文关键字:引用      更新时间:2023-10-16

当函数的参数通过引用传递时,该参数是否必须具有初始值?我写了一个小函数,通过引用接收uin64_t,但当我执行uint64_t a; func(VAL, a);\ VAL is definitely defined 时,它崩溃了

该函数只是给a一个新值,因此未定义的值

应该不会有任何问题

这取决于函数的作用。如果它试图读取参数中的值,则会得到未定义的行为。如果你只是分配给参数,你就可以了:

void func(int & var) {
    var = 5; // fine
}
void func(int & var) {
    std::cout << var << std::endl; // not fine
}

与引用无关-使用统一变量通常会导致未定义或至少不必要的行为。然而,像这样的东西是可以的:

void f( int & x ) {
  x = 42;
}
int main() {
    int a;
    f( a );
}

读取未初始化的变量会调用未定义的行为。

问题的答案是否定的。应用程序崩溃的原因可能是a没有初始化。这就是为什么总是初始化变量很重要。