在C ++中,我们不能在没有初始化的情况下声明引用。为什么?

时间:2015-03-21 02:22:22

标签: c++ binding reference

在C ++中,我们不能在没有初始化的情况下声明引用。这是什么原因。虽然我们知道在运算符重载和其他概念中引用的使用。

2 个答案:

答案 0 :(得分:1)

C ++引用(在该单词的普通C ++含义中)无法重新分配。因此,如果未初始化引用,则无法引用任何内容。并且该语言不支持空引用,因此,如果允许的话,未初始化的引用将总是出错。

答案 1 :(得分:0)

C ++引用实际上是伪装的指针,但它们导致更清晰的代码。引用只能引用单个对象(不能将其重新分配给其他对象)。 C ++引用不能是null。然后想想它是如何未初始化的。

引用的行为类似于值类型,这也是它不能为空的另一个原因。将它视为另一个变量的别名。

int a = 3;
int& b = a;
auto c = b; // When you use references in such expressions, 
            // it behaves exactly like substituting the referred variable.

此处c不是对ab的引用,而是int类型的引用。该值已从a复制到c

以上代码相当于,

int a = 3;
int c = a;  

在C中,它不支持引用,上面的代码写为

int a = 3;
int* b = a;
int c = *b;

引用会自动解除引用,无法null并使代码清晰。

注意: 在C ++中,应该在构造函数中初始化作为类字段的引用。

class SomeClass {
  int& a; // This is not an uninitialized reference. It should be initialized 
          // in the constructor. Otherwise the compiler will throw an error.
public:
  SomeClass(int& b) : a(b) {} 
};