问题标签 [most-vexing-parse]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
929 浏览

c++ - 为什么我需要在构造函数调用中使用双括号,例如: foo x( (bar()) );

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

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

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

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

0 投票
2 回答
794 浏览

c++ - 理解“最令人头疼的解析”——为什么允许模棱两可的语法?

在试图理解 C/C++ 中“最令人头疼的解析”问题时,这个问题立刻浮现在脑海中——为什么有一个语法会导致这个问题开始呢?

例如,

那么,为什么不简单地禁止TimeKeeper time_keeper(Timer())函数声明采用未命名函数 ptr 返回类型 Timer 呢?作为一个函数声明器是TimeKeeper time_keeper(Timer (*)())劣等的吗?

是不是由于这种语法,我们甚至会产生这种歧义,或者我错过了什么?

编辑:就个人而言,我从未用作TimeKeeper time_keeper(Timer())函数声明。我一直使用Timer (*)()来指定函数指针,因为我发现它更清晰。

0 投票
4 回答
78 浏览

c++ - 复制操作省略后对象无效?

可能重复:
为什么使用空括号调用不带参数的构造函数是错误的?
最令人头疼的解析:为什么不 A a(()); 工作?

这让我很生气。也许它太简单了。

GCC 4.6 给了我:

省略复制操作后,有效代码可能如下所示:

但是为什么我不能打电话work()??

编辑:

是的,重复(见下文)。第一次搜索时没有找到原始帖子,因为这个症状的来源位于我没想到的地方。

0 投票
3 回答
2525 浏览

c++ - 为什么这会调用默认构造函数?

我本来希望这可以打印

  • X(int), 因为X(answer);可以解释为从intto的转换X, 或
  • 什么都没有,因为X(answer);可以解释为变量的声明。

但是,它会打印X(),我不知道为什么X(answer);要调用默认构造函数。

奖励积分:我必须更改什么才能获得临时声明而不是变量声明?

0 投票
3 回答
184 浏览

c++ - gcc中class(*)()的含义

我无法理解这个编译器错误。我在帖子标题中写了 class(*)() 因为我正在实例化的类称为“不透明”,但该名称不提供信息或相关。它是一个模板化的循环缓冲区和一些测试。我正在使用 opaque 类来测试具有完整类/结构类型的数据结构。我也在使用原语(目前是 int)进行测试,并且该测试函数不会给我这个编译器错误。还有比这更多的代码,但我提供了我认为相关的部分。如果您有兴趣,完整的代码在这里。

gcc 错误:

测试.cpp:

CircBuf.h:

如果我声明一个 opaque* 并将其传递给删除:

我得到一个类似的错误:

0 投票
3 回答
660 浏览

c++ - 使用临时对象调用构造函数

我不明白下面的问题。

完整的错误消息是(Visual Studio 2010)

修复很简单:

这是一个 MSVC 特有的问题吗?如果不是,有人可以解释该语言的哪些怪癖阻止我打电话Box box(InnerBox());吗?

0 投票
5 回答
7075 浏览

c++ - 未调用 C++ 构造函数

我是 C++ 新手,这是我第一次使用它的类,我想知道如何调用构造函数?我已经阅读了一些关于 C++ 类的文档,这就是我想出我所拥有的东西的方式。构造函数调用私有方法来设置服务器。

0 投票
1 回答
2152 浏览

c++ - `List x;` 和 `List x()` 之间有什么区别吗

标题来自 Marshall Cline 的著名站点C++ FAQ

作者声称以下两个代码示例之间存在差异。

假设 List 是某个类的名称。然后函数 f() 声明了一个名为 x 的本地 List 对象:

但是函数 g() 声明了一个名为 x() 的函数,它返回一个 List:

但是使用第二种变体真的是错误的吗?

如果它真的是一个声明,编译器不会抱怨你不能在一个函数中声明一个函数吗?

0 投票
1 回答
343 浏览

c++ - 重载运算符 << 输出布尔值。为什么?

xml_attribute.h

xml_attribute.cpp

驱动程序.cpp

驱动程序的输出是“1”,但我希望它是一个“=”符号。
为什么它输出对a的引用?
如果我更改XML_AttributeT a();XML_AttributeT a;甚至不会编译。

我做错什么了?

0 投票
3 回答
256 浏览

c++ - 非常量引用的无效初始化

好吧,我正试图找出这个错误,到目前为止,我完全没有运气。我这样做是为了做作业,这就是为什么我不使用包含的课程。

以下是相关代码:

从 .h 文件中...:

这会引发错误:“从 'Vec (*)()' 类型的右值对 'Vec&' 类型的非常量引用的初始化无效”我对 C++ 完全陌生,因此将不胜感激。