ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – auto \u0026\u0026 variable不是右值引用

2019-08-23 03:05:00  阅读:176  来源: 互联网

标签:forwarding-reference c c11 auto


为什么汽车&&是不是左值参考?

Widget&& var1 = Widget(); // rvalue reference
auto&& var2 = var1; //var2 not rvalue reference

下面是右值参考示例

void f(Widget&& param); // rvalue reference
Widget&& var1 = Widget(); // rvalue reference

为什么var2不是右值参考,而f和var2是右值参考?

解决方法:

一旦确定了初始化程序的类型,编译器就会使用函数调用中的模板参数推导规则来确定将替换关键字auto的类型(有关详细信息,请参阅模板参数推导#Other contexts).关键字auto可以伴随有修饰符,例如const或&,它们将参与类型推导.

例如,给定

const auto& i = expr;

i的类型正是虚构中的参数u的类型

template template<class U> 
void f(const U& u)

如果编译函数调用f(expr).

一般来说,可以如下思考.

 template template<class U> 
    void f(paramtype u)

因此,汽车&&根据初始化器,可以推导出左值引用或右值引用.

在您的情况下,虚构的模板看起来像

 template template<class U> 
        void f(U&& var2){}
f(var1) 

这里,var1被命名为rvalue,它被视为左值,因此var2将被推导为左值.

请考虑以下示例:

auto&& var2 = widget() ; //var2 is rvalue reference here .
int x=10;
const int cx=10;
auto&& uref1 = x; // x is int and lvalue, so uref1's type is int&
auto&& uref2 = cx; // cx is const int and lvalue,  so uref2's type is const int&
auto&& uref3 = 27; // 27 is int and rvalue,  so uref3's type is int&&

标签:forwarding-reference,c,c11,auto
来源: https://codeday.me/bug/20190823/1694664.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有