有关通用参考的快速查询:
假设我有这段代码
int q = 10;
auto && wtf = &q;
这个编译很好,但我不知道引擎盖后面发生了什么。它正在引用一个地址?这不是指针的工作吗?
我试图推断auto&&
的类型将是,我是通过以下方式完成的:
int & test = &q //error
int && test = &q //error too
那它变成了什么?我需要澄清正在发生的事情以及从通用参考中获取&
的目的是什么?我这样做是因为我试图理解std :: bind,因为它可以获取地址或指针(这是指向的地址,也就是指针的值)。
答案 0 :(得分:1)
当你写&q
时,你会创建一个临时值。
rvalue [...]是xvalue,临时对象(12.2)或其子对象,或者与对象无关的值。 [§3.10]
这些最好绑定到右值引用,所以
auto && wtf = &q;
成为&&
类型的右值引用(&&
且&&
保留&q
)。这不是int
,而是int *
。这就是你的手动尝试失败的原因。
如果你想绑定一个左值,就像一个局部变量,那么你得到一个左值引用:
int * qptr = &q;
auto && wtf2 = qptr;
// auto becomes (int *)&
// & combined with && becomes &
整件事情可见新见in action here.