aby*_*s.7 7 c++ rvalue-reference c++11 pass-by-rvalue-reference
我有一个代码:
void f(int&& i) {
auto lambda = [](int&& j) { (void)j; }
lambda(i);
}
int main() {
f(5);
}
Run Code Online (Sandbox Code Playgroud)
Clang ++给出了一个错误: no known conversion from 'int' to 'int &&' for 1st argument
为什么在传递给i它int时改变它的类型lambda()?
Rei*_*ica 14
i是类型int&&,也就是说,它是"rvalue reference to int" 的类型.但请注意,i它本身是一个左值(因为它有一个名称).作为左值,它不能绑定到"对右值的引用".
要绑定它,必须使用std::move()或将其转回rvalue std::forward().
扩展一点:表达式的类型及其值类别(很大程度上)是独立的概念.该类型的i是int&&.该值类的i是左值.
这里有两个要素:
i具有类型int&&或"rvalue reference to int",其中"rvalue reference"是&&要素的名称,允许将rvalues绑定到引用;i有一个名称,因此命名它的表达式是左值,无论其类型或标准委员会决定称之为该类型.:)(注意,看起来像的表达式i有类型int,而不是int&&因为原因.当你开始使用参数时,rvalue ref会丢失,除非你使用类似的东西std::move来取回它.)
| 归档时间: |
|
| 查看次数: |
1731 次 |
| 最近记录: |