gcc
中编译一些可移植代码时遇到了这个问题。基本上,这个奇怪的代码在Visual Studio中编译,确实让我大吃一惊:Visual studio
让这一切飞起来。 gcc
将其视为编译错误。有趣的是,如果将def Zebra键入int,则VC++
会抱怨。相当矛盾的行为。有想法吗?#1 楼
这是Visual Studio的旧扩展,我在Microsoft网站上只能找到此错误报告:临时对象可以绑定到非常量引用,该示例具有以下示例代码:struct A {};
A f1();
void f2(A&);
int main()
{
f2(f1()); // This line SHALL trigger an error, but it can be compiled without any errors or warnings.
}
响应说明之一:
有4级警告(如果将/ W4传递给编译器,则启用4级警告)
此博客文章:Visual C ++如此自由,涵盖了此扩展说明:
使用禁用语言扩展(/ Za)使它成为一个错误:
#2 楼
正如其他人所说,这是由于Microsoft C ++扩展。尽管不建议使用/Za
标志,因为它可能会损坏东西。 而是使用
/permissive-
开关以获得更好的标准合规性,对于这些情况,您会得到健康的错误。请注意,此标志自VS 2017起可用。开关/ Za不支持某些关键的Microsoft SDK头文件。相比之下,/ permissive-提供了一种有用的一致性模式,其中输入的C ++代码根据ISO C ++规则进行解释,但是还允许在Visual C ++支持的目标上编译C ++所需的一致性扩展。
更多有关信息,请参见Visual C ++ Team Blog。
评论
可能值得注意的是/ permissive标志自VS 2017开始可用。您可以通过添加文章中的相关引号来改善此答案。就像做什么一样,为什么介绍了它以及与/ Za的关系
– bolov
17-10-23在8:59
评论
这不是一个错误,它是一个编译器扩展,并且是一个邪恶的扩展。MSVC确实有警告C4239:使用了非标准扩展名,但显然您已关闭该警告。
我不明白为什么您需要使用无限递归函数进行演示。