首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解C++编译器

理解C++编译器
EN

Stack Overflow用户
提问于 2012-01-24 13:35:33
回答 2查看 738关注 0票数 5

可能重复:

Most vexing parse: why doesn't A a(()); work?

我有一个简单的C++问题,这使我想重新开始我的CS学位,再次尝试学习一些东西。;)

为什么这段代码不编译:

代码语言:javascript
复制
vector<int> v(int());
v.push_back(1);

而另一个没有一个警告就编译了

代码语言:javascript
复制
vector<int> v((int()));
v.push_back(1);

甚至很难找到差异(添加了额外的括号:P)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-24 13:38:04

这被称为最烦人的解析。

代码语言:javascript
复制
vector<int> v(int());

声明一个函数v,它接受一个函数(不接受返回int的参数)并返回一个vector<int>。这将自动“调整”到函数v,该函数接受指向函数的指针(不接受返回int的参数)并返回vector<int>

额外的一对括号抑制了这种解释,因为您不能在函数声明中的参数声明器周围放置额外的括号,因此(int())只能解释为名为v的对象的初始化器。

C++有一个明确的消歧规则,如果它具有语法意义(但不一定是语义的),它更愿意将事物(在本例中为int())解析为声明者,而不是表达式。

票数 9
EN

Stack Overflow用户

发布于 2012-01-24 13:44:16

实际上,这是一个函数声明。请参阅:http://www.gotw.ca/gotw/075.htm

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

https://stackoverflow.com/questions/8987716

复制
相关文章

相似问题

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