首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++成语: rvalue如何作为rvalue传递?

C++成语: rvalue如何作为rvalue传递?
EN

Stack Overflow用户
提问于 2019-09-17 09:12:47
回答 1查看 52关注 0票数 3

下面的代码没有编译。Clang给出了以下错误消息:candidate function not viable: no known conversion from 'A' to 'A &&' for 1st argument

这就好像af()中是一个值。

代码语言:javascript
复制
struct A{};

void g(A&& a){
    return;
}

void f(A&& a){
    g(a);
}

int main(){
    return 0;
}

这是合理的,因为防止f()多次调用g()

下面将修复我的代码:

代码语言:javascript
复制
g(std::move(a)); 

但我看错了:想想如果有人将f()的签名修改为void f(A& a)会发生什么。

有更好的成语吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-17 09:20:37

但是看错了我:想想如果有人将f()的签名修改为void f(A& a)会发生什么。

更改与参数的值类别有关的函数签名是一项重大更改,可能需要手动检查该函数的每次调用。您将找不到一个神奇地适应这种变化的C++成语。

"fix“g(std::move(a))是保持函数参数的rvalueness的正确方法。如果g应该对rvalue进行操作,请继续使用它。如果您后来决定g接受一个rvalue是没有意义的,但是您想要传递一个lvalue,那么重构它-并调整调用。在这种情况下,编译器将帮助您拒绝将rvalue绑定到函数参数A& a

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57971034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档