gpt4 book ai didi

c++ - `auto` 引用的说明符类型推导

转载 作者:可可西里 更新时间:2023-11-01 17:09:08 25 4
gpt4 key购买 nike

让我们考虑以下代码片段

void Test()
{
int x = 0;

int& rx = x;
int* px = &x;

auto apx = px; // deduced type is int*
auto arx = rx; // deduced type is int
}

可以类比指针类型,期望arx的推导类型是int&,但实际上是int

标准中的规则是什么?其背后的原因是什么?有时我会在这样的情况下被它捕获:

const BigClass& GetBigClass();
...
auto ref_bigclass = GetBigClass(); // unexpected copy is performed

最佳答案

使用auto&:

auto& ref_bigclass = GetBigClass();

引用应该是透明的:对它们的任何操作都发生在它们引用的对象上,没有办法“获取”引用本身。

UPD:这在 7.1.6.4/6 中有介绍:

Once the type of a declarator-id has been determined according to 8.3, the type of the declared variable using the declarator-id is determined from the type of its initializer using the rules for template argument deduction.

模板参数推导在 14.8.2.1/3 中定义:

If template parameter type P is a reference type, the type referred to by P is used for type deduction.

附言请注意,这对于 decltype 是不同的:decltype(rx) 将产生 int& 类型 (7.1.6.2/4)。

关于c++ - `auto` 引用的说明符类型推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11886930/

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