这个C++;参考初始化合法吗? 我现在正在阅读C++入门,在其中一个练习中,它显示了2种类型的参考初始化,一个是const,一个不是,一个参考点是0个。我以为引用只能指向对象 int i = -1, &r = 0; // illegal, r must refer to an object. const int i = -1, &r = 0; // legal.

这个C++;参考初始化合法吗? 我现在正在阅读C++入门,在其中一个练习中,它显示了2种类型的参考初始化,一个是const,一个不是,一个参考点是0个。我以为引用只能指向对象 int i = -1, &r = 0; // illegal, r must refer to an object. const int i = -1, &r = 0; // legal.,c++,variables,reference,constants,C++,Variables,Reference,Constants,第一个,int变量i是-1。然后int引用r引用0,它是 无效,明白了 现在在第二个例子中,常量int i=-1,然后常量引用r=0。。怎么做 我知道引用不能是常量,常量就是引用所指的,书中说常量引用可以同时引用常量和非常量对象(同一类型)。这仍然不能解释为什么它可以指向0,而0根本不是对象 我不确定第二句话的正确性,请有人解释一下 In const int &r = 0; 创建值为0的临时对象,然后将r绑定到该对象。这是允许的,因为const引用被允许绑定到右值。它也适用于右值引用:

第一个,int变量i是-1。然后int引用r引用0,它是 无效,明白了

现在在第二个例子中,常量int i=-1,然后常量引用r=0。。怎么做

我知道引用不能是常量,常量就是引用所指的,书中说常量引用可以同时引用常量和非常量对象(同一类型)。这仍然不能解释为什么它可以指向0,而0根本不是对象

我不确定第二句话的正确性,请有人解释一下

In

const int &r = 0;
创建值为0的临时对象,然后将
r
绑定到该对象。这是允许的,因为
const
引用被允许绑定到右值。它也适用于右值引用:

int&& r = 0;  // ok
但是,它不适用于
int&
,因为
int&
变量只能绑定到左值


请注意,引用绑定到的临时对象将一直存在,直到引用超出范围。请参见C++特别允许将右值绑定到常量左值引用,因此这是完全符合标准的:

const int &r = 0;

  • rvalue可用于初始化常量左值引用,在这种情况下,由rvalue标识的对象的生存期将延长,直到引用的范围结束

你知道右值和左值这两个词吗?这些决定了允许绑定到哪些引用(以及类型)。@NirFriedman问这个问题时,我没有,但当得到回答时,我用谷歌搜索了它们,现在我做到了。。谢谢好的,常量引用可以绑定到任何可以转换为常量引用的对象,但是int引用只能绑定int,period,@imarioofficer可以用作
int&
某些对象的初始值设定项,该对象具有到
int&
的转换运算符。底线是,必须能够为初始化获得左值。哦,好的,我刚刚读了关于左值和右值的内容,现在我得到了,谢谢!参考参考寿命延长,该答案将得到改进;为什么这有点安全。