c++ - 将最令人烦恼的解析强制消歧为函数声明

标签 c++ clang most-vexing-parse

我在“最烦人的解析”中看到的所有讨论都是关于如何强制编译器将 case 视为带有初始化程序的变量声明(而不是将实际解释视为函数声明)。参见,例如,this stackoverflow threadthis article from Ask-Coder .

我的团队有一个规则:将尽可能多的警告强制为错误。目标是防止 cruft 进入代码;成功的编译应该是无声的,禁用警告是灾难的根源。这一切都很好,除了我被 Most Vexing Parse 咬伤了一个声明,该声明实际上解析了我希望它解析的方式。

具体来说:

int some_function();

如 Ask-Coder 文章中所示,此代码片段确实触发了 clang 中的 Most Vexing Parse 警告,然后我们将其转换为错误,这让我大吃一惊。

我可以在此处的语法中做些什么来使它 (a) 成为合法的 C 声明(不仅仅是 C++)并且 (b) 不会触发 Most Vexing Parse 警告?或者我是否必须在这行代码周围进行 #pragma 舞蹈并使警告静音?

最佳答案

能不能这么简单

int some_function(void);

关于c++ - 将最令人烦恼的解析强制消歧为函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28730661/

相关文章:

c++ - 在 boost::asio 中,为什么没有用于读/写的套接字成员函数?

c++ - 允许构造函数调用私有(private)方法的默认参数

c++ - (为什么)用临时/匿名对象实例化模板类是令人讨厌的解析?

c++ - OpenCV drawCircle 并在圆线上绘制矩形

c++ - 所有可能的毕达哥拉斯三元组

具有相同名称但参数不同的 C++ 方法

c++ - Xcode 4.1 : Apple LLVM 2. 1 的行为不同于 LLVM GCC 4.2 和 GCC 4.2

objective-c - 在 Xcode 的 Objective-C 中,硬编码数学运算是在编译时还是在运行时执行的?

c++ - 涉及通用引用的过载解决方案

c++ - 了解 'most vexing parse' - 为什么允许有歧义的语法?