C++ T、T和T的形式差异&&

C++ T、T和T的形式差异&&,c++,reference,C++,Reference,我正在寻找该标准的规范性参考 我们可以声明引用类型的变量,如下所示: int a = 5; int &b = a; 形式上,a的类型是int,但b的类型是int&。那么为什么我们可以初始化int&使用int?我正在寻找这些类型的标准转换,但似乎没有 您可以使用int初始化int&因为标准规定: 声明为T&或T&&的变量,即“引用类型T”8.3.2,应通过对象初始化, 或函数,类型为T或由可转换为T的对象生成 N3936,8.5.3/1 没有从T到T的标准转换,并且 当引用类型的参数直接

我正在寻找该标准的规范性参考

我们可以声明引用类型的变量,如下所示:

int a = 5;
int &b = a;
形式上,a的类型是int,但b的类型是int&。那么为什么我们可以初始化int&使用int?我正在寻找这些类型的标准转换,但似乎没有

您可以使用int初始化int&因为标准规定:

声明为T&或T&&的变量,即“引用类型T”8.3.2,应通过对象初始化, 或函数,类型为T或由可转换为T的对象生成

N3936,8.5.3/1

没有从T到T的标准转换,并且

当引用类型的参数直接绑定8.5.3到参数表达式时,隐式转换 序列是标识转换,除非参数表达式的类型是 参数类型,在这种情况下,隐式转换序列是派生到基本转换13.3.3.1


N3936,13.3.3.1.4/1;emphasis mine

a和b的类型相同:int&。在您的代码中,两者都引用内存中的同一对象。@Nawaz为什么?声明的类型是int。从声明中可以明显看出。你说的是decltypea,我说的是decltypea。注意到区别了吗?请阅读。谢谢你的回答,但你能在下面澄清一下吗?如果我们按照以下方式初始化引用:int a=5;int&c=a;int&d=c;后一个引用不是由对象初始化的。从形式上讲,它是由绑定到对象的引用初始化的,而不是由对象本身。既然引用不是对象,我们如何将该规则应用于我在这里引用的案例?@DmitryFucintv引用就是对象。见5/5。左值引用类型的表达式被调整为非引用类型的左值。@DmitryFucintv:您似乎缺少表达式值的概念。变量用值初始化。值永远不是引用。