Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 声明引用在类中有效,但在主函数中无效_C++_C++11 - Fatal编程技术网

C++ 声明引用在类中有效,但在主函数中无效

C++ 声明引用在类中有效,但在主函数中无效,c++,c++11,C++,C++11,为什么我不能在main函数中使用int&b,但可以在Test类中使用它?您不能使用不指向任何内容的引用。简单地定义一个类实际上并没有实例化一个类;如果您试图创建一个测试,您会发现它也会失败。您不能有一个不指向任何内容的引用。简单地定义一个类实际上并没有实例化一个类;如果您试图创建一个测试,您会发现它也会失败。引用变量需要一个初始值设定项。局部变量在声明点初始化。成员变量在中初始化。引用变量需要初始值设定项。局部变量在声明点初始化。成员变量在中初始化。引用必须在其开始存在的位置绑定到某个对象 在类

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

您不能使用不指向任何内容的引用。简单地定义一个类实际上并没有实例化一个类;如果您试图创建一个测试,您会发现它也会失败。

您不能有一个不指向任何内容的引用。简单地定义一个类实际上并没有实例化一个类;如果您试图创建一个测试,您会发现它也会失败。

引用变量需要一个初始值设定项。局部变量在声明点初始化。成员变量在中初始化。

引用变量需要初始值设定项。局部变量在声明点初始化。成员变量在中初始化。

引用必须在其开始存在的位置绑定到某个对象

在类中,声明指定类的每个实例都应该有此引用。每个这样的引用在其类实例创建时开始存在。此时,类中的某些构造函数必须通过构造函数的成员初始值设定项列表对其进行初始化,如果引用在声明中没有初始化,而您的引用没有初始化


在函数中,引用在执行通过声明时开始存在。因此,必须在此点对其进行初始化。

引用必须在其开始存在的点绑定到某个对象

在类中,声明指定类的每个实例都应该有此引用。每个这样的引用在其类实例创建时开始存在。此时,类中的某些构造函数必须通过构造函数的成员初始值设定项列表对其进行初始化,如果引用在声明中没有初始化,而您的引用没有初始化


在函数中,引用在执行通过声明时开始存在。因此,必须在此时对其进行初始化。

尝试创建一个测试实例,因此它的b成员实际上存在。我现在看到:错误:在“类测试”中未初始化引用成员。@Control12Panel:您可以使用聚合初始化创建测试实例。如果您尝试为类测试定义构造函数,但未能初始化引用成员,则也会出现错误。在您的代码中,默认构造函数的隐式定义不存在,因为默认构造函数未使用odr。有些关联-引用和指针之间的关键区别-在创建过程中必须初始化引用。您不能显式初始化指针。您不能分配给引用,但可以分配给指针。请尝试创建Test的实例,因此它的b成员实际上存在。我现在看到:错误:在“类测试”中未初始化引用成员。@Control12Panel:您可以使用聚合初始化创建测试实例。如果您尝试为类测试定义构造函数,但未能初始化引用成员,则也会出现错误。在您的代码中,默认构造函数的隐式定义不存在,因为默认构造函数未使用odr。有些关联-引用和指针之间的关键区别-在创建过程中必须初始化引用。您不能显式初始化指针。您不能指定引用,但可以指定指针。谢谢。我测试并得到错误:“类测试”中的未初始化引用成员。谢谢。我测试并得到错误:“类测试”中未初始化的引用成员。@T.C:正式的mem初始值设定项列表。固定,应为构件。谢谢。@T.C.:正式的mem初始化列表。固定,应为构件。谢谢
class Test{
    int &b; // no error, can compile
};


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