gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:55 24 4
gpt4 key购买 nike

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

int x = 5;

int && y = x;

它将无法编译,并出现一个错误,提示右值引用无法绑定(bind)到左值。

但是如果我这样做:

int x = 5;

auto && y = x;

它编译没有错误。为什么会这样?我试图获取 y 的类型,但 typeid() 带走了引用属性。 auto && 是否根据分配的内容自动折叠为 &&&

最佳答案

在第一种情况下int && y,变量y只能绑定(bind)到rvaluex是不是。

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

auto && y = x;

因为x是一个左值,auto被推导为int&,因此它变成:

int& && y = x;

在引用折叠之后,它变成了:

int & y = x;

这很好。


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

  • Universal Reference(或Forwarding Reference,因为它已被提议用于改进术语)

  • 引用折叠

希望对您有所帮助。

关于c++ - "int &&"和 "auto &&"之间的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34228443/

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