当前位置:  开发笔记 > 编程语言 > 正文

"int &&"和"auto &&"之间的不同行为

如何解决《"int&&"和"auto&&"之间的不同行为》经验,为你挑选了1个好方法。

在C++ 11中,如果我尝试这样做:

int x = 5;

int && y = x;

它将无法编译,错误告诉r值引用无法绑定到左值.

但是,如果我这样做:

int x = 5;

auto && y = x;

它编译没有错误.为什么会这样?我试图获得类型ytypeid()删除了引用属性.是auto &&自动折叠到一个&&&取决于分配的内容?



1> Nawaz..:

在第一种情况int && y中,变量y可以结合仅右值,其x是没有的.

auto && y然而,在第二种情况下,变量y可以绑定到任何东西,因为y无论如何都会推导出类型- 并且将相应地应用引用 - 折叠 - 这就是您的代码编译的原因:

auto && y = x;

由于x是左值,auto推断为int&,因此它变成:

int& && y = x;

在参考折叠之后,它变成:

int & y = x;

这很好.


要更详细地了解它,请阅读:

通用参考(或转发参考,因为它已被提议用于改进术语)

参考折叠

希望有所帮助.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有