如果参数是地址,则通用参考推论

时间:2015-07-11 05:00:28

标签: c++

有关通用参考的快速查询:

假设我有这段代码

int q = 10;
auto && wtf = &q;

这个编译很好,但我不知道引擎盖后面发生了什么。它正在引用一个地址?这不是指针的工作吗?

我试图推断auto&&的类型将是,我是通过以下方式完成的:

int & test = &q //error
int && test = &q //error too

那它变成了什么?我需要澄清正在发生的事情以及从通用参考中获取&的目的是什么?我这样做是因为我试图理解std :: bind,因为它可以获取地址或指针(这是指向的地址,也就是指针的值)。

1 个答案:

答案 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.