gpt4 book ai didi

c++ - 这是冲突吗?关于 C++ 汽车

转载 作者:行者123 更新时间:2023-11-27 22:46:29 24 4
gpt4 key购买 nike

在 C++ primer 5 中我看到了代码:

const int a = 40;
auto &b = a;

编译器可以推导出 b 类型:const int &
我认为这是合理的,因为 a 是 const int,如果 b 的类型是 int &,我们可以更改 const int 的值,这是非法的。

但是书上说auto推导会省略顶层const,有了这个规则,代码中:auto &b = a; a只有int类型,我们可以defer b 的类型为 int &,这与 b 的类型为 const int & 相冲突。

还有一个问题是代码:

auto &a = 8;

编译器无法在代码中直接推断出 a 具有 const int & 类型:

const int a = 40;
auto &b = a;

编译器可以。为什么不同?

最佳答案

auto 推导,除了一些小的异常(exception),与普通模板推导的工作方式完全相同。假设我们有一个函数:

template <class T> void foo(T& param);

const int a = 40;
foo(a);

在此示例中,T 将推导为 const int 并且 param 的类型将为 const int& .出于同样的原因,auto& b = a; 为您提供了对 const int 的引用。

但是,foo(8) 不会编译。 T& 只能绑定(bind)到左值,8 不是左值。所以这是病态的。同样,auto& a = 8; 格式错误。

关于c++ - 这是冲突吗?关于 C++ 汽车,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42281699/

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