首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用"auto“的声明是否与使用具体类型说明符的外部声明匹配?

使用"auto“的声明是否与使用具体类型说明符的外部声明匹配?
EN

Stack Overflow用户
提问于 2014-10-15 23:12:50
回答 1查看 2.5K关注 0票数 58

考虑以下程序:

代码语言:javascript
复制
extern int x;
auto x = 42;
int main() { }

Clang 3.5接受它(live demo),GCC 4.9和VS2013不接受(live demo for the former)。谁是对的,C++标准中规定的正确行为在哪里?

EN

回答 1

Stack Overflow用户

发布于 2018-09-14 14:39:01

我假设[dcl.spec.auto]p11中的限制是存在的,因为否则,它将允许:

代码语言:javascript
复制
int f();
auto f(); // What's the return type here?

问题是,你可以有一个未演绎的类型类型,有一个函数的返回类型。没有基于前面的声明的演绎规则,这就是为什么函数不允许这样的混合,即使以下是完全可以的:

代码语言:javascript
复制
int f();
auto f() { return 1; }

变量不存在此问题:

代码语言:javascript
复制
extern int v;
extern auto v; // ill-formed

任何仅限声明的变量都必须使用非占位符类型。这意味着,如果您使用占位符类型来定义v,则可以毫无问题地推导出它,当然,还必须与第一个声明中使用的非占位符类型相匹配。

代码语言:javascript
复制
extern int v;
auto v = 1; // ok, type deduced as 'int', matches first declaration.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26386010

复制
相关文章

相似问题

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