可能重复:
为什么使用空括号调用不带参数的构造函数是错误的?
我已经看到有关嵌套构造函数调用和支撑的C++ FQA 条目,并且一直想知道 C++ 解析器如何解析两个以及为什么解析器无法解析它。
所以我明白为什么foo xxx();
是模棱两可的。但是是什么让人foo x(bar());
模棱两可,因为它显然不是前瞻性声明。(即:应该有一个可以成功检测到这一点的语法)。
有人可以解释 C++ 语法那部分的局限性和歧义吗?
可能重复:
为什么使用空括号调用不带参数的构造函数是错误的?
我已经看到有关嵌套构造函数调用和支撑的C++ FQA 条目,并且一直想知道 C++ 解析器如何解析两个以及为什么解析器无法解析它。
所以我明白为什么foo xxx();
是模棱两可的。但是是什么让人foo x(bar());
模棱两可,因为它显然不是前瞻性声明。(即:应该有一个可以成功检测到这一点的语法)。
有人可以解释 C++ 语法那部分的局限性和歧义吗?
foo x(bar());
这可能是:
1) 一个名为的变量的声明,x
其值为默认构造的bar
。这与foo x = bar();
.
2) 一个被调用函数的声明,x
它返回foo
并接受一个参数——一个返回 abar
并且不接受参数的函数。这与foo x(bar (void));
C++ FQA 是一堆垃圾。忽略它。
至于foo x(bar())
,它和 一样模棱两可foo x()
,只是 的 类型x
也有一个参数,它是一个函数。在此处添加一个指针,您就会明白我的意思。
foo (*x)();
foo (*x)(bar(*)());
即使允许这样做的想法也非常愚蠢,但现在没有人可以改变它。
(我偷偷怀疑这种语法有点过时,但我相信有人会纠正我)。