【发布时间】:2025-12-01 16:40:01
【问题描述】:
我在gcc 中编译一些可移植代码时遇到了这个问题。基本上这个奇怪的代码在 Visual Studio 中编译,这真的让我大吃一惊:
class Zebra {int x;};
Zebra goo() {Zebra z; return z;}
void foo(Zebra &x)
{
Zebra y;
x = y;
foo(goo());
}
Visual studio 让这个飞起来。 gcc 会将其捕获为编译错误。有趣的是,如果你将 Zebra 输入为 int,VC++ 会抱怨。相当矛盾的行为。想法?
【问题讨论】:
-
这不是一个错误,它是一个编译器扩展,而且是一个邪恶的扩展。
-
MSVC 确实有
warning C4239: nonstandard extension used,但显然您已关闭该警告。 -
我不明白你为什么需要使用无限递归函数来演示这个。
标签: c++ visual-studio temporary-objects