草庐IT

c++ - "C++ most vexing parse"的运行时行为

在尝试回答this时我发现没有()(调用“C++最烦人的解析”)的问题g++的输出是1(可以在这里看到:http://ideone.com/GPBHy),其中VisualStudio给出链接器错误。我无法理解输出如何可以1,有什么线索吗? 最佳答案 正如问题的答案已经解释的那样,由于“最令人烦恼的解析”语句而不是定义一个名为str的对象与两个istream_iterators指定其初始值设定项,被解析为名为str的函数的声明返回string.所以程序的简单版本解析为,thisonlinesample:#includevoiddoSo

c++ - 有没有办法强制 "most vexing parse"成为错误,即使是逐个类?

是否有可能(对A类进行任何修改)进行以下工作?即,使最令人烦恼的解析错误?classA{};intmain(){Aa();//canthisbeforcedtobeanerror??Ab;//thisshouldwork} 最佳答案 类A的任何修改都不会影响声明Aa();的解析方式。解析器甚至在查看A的定义之前就确定这是一个函数声明。事实上,A的定义甚至不需要可见来解析这个语句;预先声明就足够了。但是,编译器通常会对此发出警告,您可能会将其变成错误。例如,对于clang,您可以使用标志-Werror=vexing-parse。str

c++ - 术语 "Most vexing parse"是何时何地创造的?

有无数文章和博客讨论C++的mostvexingparse,但我似乎找不到比“C++文献”更具引用意义的任何内容。这个词是从哪里来的? 最佳答案 ScottMeyers的书EffectiveSTL:50SpecificWaystoImproveYourUseoftheStandardTemplateLibrary可能是2001年首次发布使用。 关于c++-术语"Mostvexingparse"是何时何地创造的?,我们在StackOverflow上找到一个类似的问题:

c++ - Most Vexing Parse 的目的是什么?

开启Wikipedia我发现了这个:Aa(A());[This]couldbedisambiguatedeitherasavariabledefinitionofclass[A],takingananonymousinstanceofclass[A]orafunctiondeclarationforafunctionwhichreturnsanobjectoftype[A]andtakesasingle(unnamed)argumentwhichisafunctionreturningtype[A](andtakingnoinput).Mostprogrammersexpectthef