gpt4 book ai didi

c++ - 为什么我不能按原样将右值引用传递给 C++11 中的另一个函数?

转载 作者:可可西里 更新时间:2023-11-01 18:04:53 27 4
gpt4 key购买 nike

我有一个代码:

void f(int&& i) {
auto lambda = [](int&& j) { (void)j; }
lambda(i);
}

int main() {
f(5);
}

Clang++ 给出错误:第一个参数没有从“int”到“int &&”的已知转换

为什么 i 在传递给 lambda() 时将其类型更改为 int

最佳答案

iint&& 类型,也就是说,它是“对 int 的右值引用”类型。但是,请注意 i 本身是一个左值(因为它有一个名字)。作为左值,它不能绑定(bind)到“对右值的引用”。

要绑定(bind)它,您必须使用 std::move()std::forward() 将它转回右值。

扩展一点:表达式的类型和它的值类别(在很大程度上)是独立的概念。 i类型int&&i值类别 是左值。

关于c++ - 为什么我不能按原样将右值引用传递给 C++11 中的另一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21941276/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com