声明引用在类中有效但在main函数中不起作用

时间:2015-03-03 23:56:39

标签: c++ c++11

class Test{
    int &b; // no error, can compile
};


int main() {
    int &b; // error: 'b' declared as reference but not initialized 
}

为什么我不能在main函数中使用int& b,但可以在Test类中使用它?

3 个答案:

答案 0 :(得分:8)

引用必须绑定到它开始存在的位置。

在类中,声明指定类的每个实例都应该具有此引用。每个此类引用在创建其类实例时都会启动。此时,如果引用尚未在声明中初始化(并且您的声明不是),则类中的某些构造函数必须通过构造函数的成员初始化列表对其进行初始化。

在函数中,当执行传递声明时,引用开始存在。因此,必须在此时进行初始化。

答案 1 :(得分:5)

您无法提供任何指向任何内容的参考。简单地定义一个类并不能实际实例化一个类;如果你试图创建一个你会发现也会失败的Test

答案 2 :(得分:5)

参考变量需要初始化程序。局部变量在声明点初始化。成员变量在member initialization list中初始化。