可能重复:
Most vexing parse: why doesn't A a(()); work?
我有一个简单的C++问题,这使我想重新开始我的CS学位,再次尝试学习一些东西。;)
为什么这段代码不编译:
vector<int> v(int());
v.push_back(1);而另一个没有一个警告就编译了
vector<int> v((int()));
v.push_back(1);甚至很难找到差异(添加了额外的括号:P)。
发布于 2012-01-24 13:38:04
这被称为最烦人的解析。
vector<int> v(int());声明一个函数v,它接受一个函数(不接受返回int的参数)并返回一个vector<int>。这将自动“调整”到函数v,该函数接受指向函数的指针(不接受返回int的参数)并返回vector<int>。
额外的一对括号抑制了这种解释,因为您不能在函数声明中的参数声明器周围放置额外的括号,因此(int())只能解释为名为v的对象的初始化器。
C++有一个明确的消歧规则,如果它具有语法意义(但不一定是语义的),它更愿意将事物(在本例中为int())解析为声明者,而不是表达式。
发布于 2012-01-24 13:44:16
实际上,这是一个函数声明。请参阅:http://www.gotw.ca/gotw/075.htm
https://stackoverflow.com/questions/8987716
复制相似问题