gpt4 book ai didi

c++ - 关于 auto to constant reference 的说明

转载 作者:太空宇宙 更新时间:2023-11-04 15:32:21 24 4
gpt4 key购买 nike

在这段代码中:

int a=8; 
const int &b = a; //b is a Low-Level const
auto c = b;

我希望 c 是常量 int 类型,因为它已被 auto 转换为低级常量。但它指的是 a(别名为 b),而不是 b 的声明。

c 仅在像 auto &c =b

这样使用时才选择 b 的类型

据我所知,只有顶级 const 被删除了。那么有人可以解释一下我的理解有什么问题吗?

而在指针的情况下,低级常量由 auto 选取:

int i=9;
const int * p=&i;
auto *d=p;
*d=45; // error: assignment of read-only location ‘* d’

.

最佳答案

表达式的类型永远不是引用类型。表达式具有非引用类型和值类别。

声明 const int &b = a; 意味着:

  • 会有一个名为b的变量。
  • 表达式 b 的类型为 const int
  • 表达式b 指定与a 相同的对象。换句话说,名称 ab 都指代同一个对象。
  • 代码 decltype(b) 解析为 const int&,但除此之外,您无法访问引用的“历史记录”。一旦它被绑定(bind),它就只是此后 int 的名称。

auto c = X; 表示 c 没有声明为引用;它的类型是从表达式 X 的类型推导出来的。如果 X 恰好是变量的标识符,则不会调用任何特殊规则; X 在所有情况下都被视为表达式。

语法 decltype(auto) C = X; 存在;如果 X 是变量的名称,则这意味着 C 的声明方式与 X 相同。(如果 X 不是变量的名称,则行为也取决于 X 的值类别)。

在您的第一个示例中,c 是从表达式 b 的类型推导出来的,它是 const int。正如您所指出的,顶级 const 在这里被删除,因此 auto c 表示 int c

在您的第二个示例中,表达式 p 的类型是 const int *。这不是顶级 const,因此 auto d = p; 将是 const int * d = p;。在这种情况下,auto *dauto d 没有区别。

关于c++ - 关于 auto to constant reference 的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47503480/

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