对于像 C++ 这样的语言,标准的存在是必须的。优秀的编译器会尽最大努力(至少是大多数优秀的编译器)来遵守。许多编译器都有语言扩展,有些是标准允许的,有些是不允许的。后一类的2个例子:
gcc 的 typeof
微软的编译器允许纯虚函数声明同时具有纯说明符(=0)和定义(这是标准禁止的——我们不讨论为什么,这是另一个话题:)
(还有很多其他例子)
这两个示例在以下意义上都很有用:example1 是一个非常有用的功能,它将在 c++0x 中以不同的名称提供。example2 也很有用,微软决定不遵守没有意义的禁令。
我很感激编译器提供了语言扩展来帮助我们的开发人员进行日常工作。但这里有一个问题:不应该有一个选项,当设置时,它要求编译器尽可能地符合标准,无论他们是否同意标准。例如 Visual Studio 就有这样一个选项,称为禁用语言扩展。但是,嘿,他们仍然允许 example2。
我希望每个人都能正确理解我的问题。MSVC 允许 example2 是一件很棒的事情,我非常希望该功能成为标准。它不会破坏任何合规的代码,它不会做任何坏事。它只是不标准。
当禁用语言扩展设置为 true 时,您希望 microsoft 禁用 example2 吗?请注意,microsoft、example2 等这些词是占位符 :) 为什么?
再次,只是为了确保。关键点是:当编译器提供了一个非标准的更好的替代方案并且是甚至可能是标准的超集,因此不会破坏任何东西。