问题标签 [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.
c++ - 为什么我需要在构造函数调用中使用双括号,例如: foo x( (bar()) );
可能重复:
为什么使用空括号调用不带参数的构造函数是错误的?
我已经看到有关嵌套构造函数调用和支撑的C++ FQA 条目,并且一直想知道 C++ 解析器如何解析两个以及为什么解析器无法解析它。
所以我明白为什么foo xxx();
是模棱两可的。但是是什么让人foo x(bar());
模棱两可,因为它显然不是前瞻性声明。(即:应该有一个可以成功检测到这一点的语法)。
有人可以解释 C++ 语法那部分的局限性和歧义吗?
c++ - 理解“最令人头疼的解析”——为什么允许模棱两可的语法?
在试图理解 C/C++ 中“最令人头疼的解析”问题时,这个问题立刻浮现在脑海中——为什么有一个语法会导致这个问题开始呢?
例如,
那么,为什么不简单地禁止TimeKeeper time_keeper(Timer())
函数声明采用未命名函数 ptr 返回类型 Timer 呢?作为一个函数声明器是TimeKeeper time_keeper(Timer (*)())
劣等的吗?
是不是由于这种语法,我们甚至会产生这种歧义,或者我错过了什么?
编辑:就个人而言,我从未用作TimeKeeper time_keeper(Timer())
函数声明。我一直使用Timer (*)()
来指定函数指针,因为我发现它更清晰。
c++ - 复制操作省略后对象无效?
这让我很生气。也许它太简单了。
GCC 4.6 给了我:
省略复制操作后,有效代码可能如下所示:
但是为什么我不能打电话work()
??
编辑:
是的,重复(见下文)。第一次搜索时没有找到原始帖子,因为这个症状的来源位于我没想到的地方。
c++ - 为什么这会调用默认构造函数?
我本来希望这可以打印
X(int)
, 因为X(answer);
可以解释为从int
to的转换X
, 或- 什么都没有,因为
X(answer);
可以解释为变量的声明。
但是,它会打印X()
,我不知道为什么X(answer);
要调用默认构造函数。
奖励积分:我必须更改什么才能获得临时声明而不是变量声明?
c++ - gcc中class(*)()的含义
我无法理解这个编译器错误。我在帖子标题中写了 class(*)() 因为我正在实例化的类称为“不透明”,但该名称不提供信息或相关。它是一个模板化的循环缓冲区和一些测试。我正在使用 opaque 类来测试具有完整类/结构类型的数据结构。我也在使用原语(目前是 int)进行测试,并且该测试函数不会给我这个编译器错误。还有比这更多的代码,但我提供了我认为相关的部分。如果您有兴趣,完整的代码在这里。
gcc 错误:
测试.cpp:
CircBuf.h:
如果我声明一个 opaque* 并将其传递给删除:
我得到一个类似的错误:
c++ - 使用临时对象调用构造函数
我不明白下面的问题。
完整的错误消息是(Visual Studio 2010)
修复很简单:
这是一个 MSVC 特有的问题吗?如果不是,有人可以解释该语言的哪些怪癖阻止我打电话Box box(InnerBox());
吗?
c++ - 未调用 C++ 构造函数
我是 C++ 新手,这是我第一次使用它的类,我想知道如何调用构造函数?我已经阅读了一些关于 C++ 类的文档,这就是我想出我所拥有的东西的方式。构造函数调用私有方法来设置服务器。
c++ - `List x;` 和 `List x()` 之间有什么区别吗
标题来自 Marshall Cline 的著名站点C++ FAQ。
作者声称以下两个代码示例之间存在差异。
假设 List 是某个类的名称。然后函数 f() 声明了一个名为 x 的本地 List 对象:
但是函数 g() 声明了一个名为 x() 的函数,它返回一个 List:
但是使用第二种变体真的是错误的吗?
如果它真的是一个声明,编译器不会抱怨你不能在一个函数中声明一个函数吗?
c++ - 重载运算符 << 输出布尔值。为什么?
xml_attribute.h
xml_attribute.cpp
驱动程序.cpp
驱动程序的输出是“1”,但我希望它是一个“=”符号。
为什么它输出对a的引用?
如果我更改XML_AttributeT a();
它XML_AttributeT a;
甚至不会编译。
我做错什么了?
c++ - 非常量引用的无效初始化
好吧,我正试图找出这个错误,到目前为止,我完全没有运气。我这样做是为了做作业,这就是为什么我不使用包含的课程。
以下是相关代码:
从 .h 文件中...:
这会引发错误:“从 'Vec (*)()' 类型的右值对 'Vec&' 类型的非常量引用的初始化无效”我对 C++ 完全陌生,因此将不胜感激。