4

可能重复:
为什么使用空括号调用不带参数的构造函数是错误的?

我已经看到有关嵌套构造函数调用和支撑的C++ FQA 条目,并且一直想知道 C++ 解析器如何解析两个以及为什么解析器无法解析它。

所以我明白为什么foo xxx();是模棱两可的。但是是什么让人foo x(bar());模棱两可,因为它显然不是前瞻性声明。(即:应该有一个可以成功检测到这一点的语法)。

有人可以解释 C++ 语法那部分的局限性和歧义吗?

4

2 回答 2

7
foo x(bar());

这可能是:

1) 一个名为的变量的声明,x其值为默认构造的bar。这与foo x = bar();.

2) 一个被调用函数的声明,x它返回foo并接受一个参数——一个返回 abar并且不接受参数的函数。这与foo x(bar (void));

于 2012-07-13T20:26:54.533 回答
4

C++ FQA 是一堆垃圾。忽略它。

至于foo x(bar()),它和 一样模棱两可foo x(),只是 的 类型x也有一个参数,它是一个函数。在此处添加一个指针,您就会明白我的意思。

foo (*x)();
foo (*x)(bar(*)());

即使允许这样做的想法也非常愚蠢,但现在没有人可以改变它。

(我偷偷怀疑这种语法有点过时,但我相信有人会纠正我)。

于 2012-07-13T20:21:57.030 回答