关于通用引用的快速查询:
假设我有这段代码
int q = 10;
auto && wtf = &q;
这个编译很好,但我不知道幕后发生了什么。它引用了一个地址?这不是指针的工作吗?
我试图推断 auto&&
的类型是,我通过以下方式做到了:
int & test = &q //error
int && test = &q //error too
那么它会变成什么呢?我需要澄清发生了什么以及从通用引用中获取 &
的目的是什么?我这样做是因为我试图理解 std::bind,因为它可以获取地址或指针(这是被指向的地址,也就是指针的值)。
最佳答案
当您编写 &q
时,您创建了一个临时值。
An rvalue [...] is an xvalue, a temporary object (12.2) or subobject thereof, or a value that is not associated with an object. [§ 3.10]
那些最好绑定(bind)到右值引用,所以
auto && wtf = &q;
成为 &q
类型的右值引用(&&
和 &&
保持 &&
)。这不是 int
,而是 int *
。这就是您手动尝试失败的原因。
如果你改为绑定(bind)到一个左值,比如局部变量,那么你会得到一个左值引用:
int * qptr = &q;
auto && wtf2 = qptr;
// auto becomes (int *)&
// & combined with && becomes &
整个事情可以重新看到in action here.
关于c++ - 如果参数是地址,则通用引用推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31353610/