通过引用传递需要具有初始值?

时间:2011-05-29 17:46:52

标签: c++ arguments pass-by-reference

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

时它崩溃了

该函数只是给a一个新值,所以未定义的值不应该有任何问题

4 个答案:

答案 0 :(得分:2)

这取决于你的功能。如果它尝试读取参数中的值,则会得到未定义的行为。如果你只是分配给参数,你很好:

void func(int & var) {
    var = 5; // fine
}

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

答案 1 :(得分:1)

与引用无关 - 使用单元化变量通常会导致未定义或至少不需要的行为。但是,这样的事情还可以:

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

int main() {
    int a;
    f( a );
}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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