c++ - 为什么在 : foo x( (bar()) ); 这样的构造函数调用中需要双括号

标签 c++ compiler-theory most-vexing-parse

<分区>

Possible Duplicate:
Why is it an error to use an empty set of brackets to call a constructor with no arguments?

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

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

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

最佳答案

foo x(bar());

这可能是:

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

2) 一个名为 x 的函数的声明,该函数返回 foo 并采用单个参数——一个返回 bar 和不带参数。这与 foo x(bar (void));

相同

关于c++ - 为什么在 : foo x( (bar()) ); 这样的构造函数调用中需要双括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11477779/

相关文章:

c++ - 如何正确使用 vector 范围构造函数?

c++ - 非类类型的错误 : request for member '..' in '..' ,

c++ - 如何根据不同的参数定义相同的宏函数

compiler-theory - 编译器如何构建语法树?

C++:竞争性编程技巧的解释

parsing - 将错误产生式添加到语法中的策略是什么?

language-agnostic - 动态调度实现

c++ - 使用 () 或不使用创建对象的区别

c++ - vector 元素大小

c++ - 命名嵌套类时无法在 Lambda 中解析名称