首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是一个冲突吗?关于c++ auto

这是一个冲突吗?关于c++ auto
EN

Stack Overflow用户
提问于 2017-02-17 02:15:49
回答 1查看 115关注 0票数 0

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

代码语言:javascript
复制
const int a = 40;
auto &b = a;

编译器可以推导出类型为:const int &b

我认为这是合理的,因为a是一个const int,如果b有int &类型,我们可以改变const int的值,这是非法的。

然而,书中说,自动推导将省略顶层常量,与此规则,在代码中:auto &b = a; a只有类型int,我们可以推迟b有类型int &,这与b有类型const int &冲突。

另一个问题是代码:

代码语言:javascript
复制
auto &a = 8;

编译器不能在代码中直接推断出具有类型const int &

代码语言:javascript
复制
const int a = 40;
auto &b = a;

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

EN

回答 1

Stack Overflow用户

发布于 2017-02-17 02:23:12

auto演绎,除了一些小的例外,与普通模板演绎的工作方式完全相同。假设我们有一个函数:

代码语言:javascript
复制
template <class T> void foo(T& param);

const int a = 40;
foo(a);

在本例中,T将推导为const intparam的类型将为const int&。根据同样的推理,auto& b = a;为您提供了对const int的引用。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42281699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档