猿问

非Const引用绑定到临时的VisualStudio错误?

非Const引用绑定到临时的VisualStudio错误?

我是在编译一些可移植代码时遇到这个问题的。gcc..基本上,这段奇怪的代码是在VisualStudio中编译的,它真的让我大吃一惊:

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++会抱怨的。相当矛盾的行为。思想?


小唯快跑啊
浏览 456回答 2
2回答

www说

这是VisualStudio的旧扩展,我可以在Microsoft站点上找到的唯一引用是以下错误报告:临时对象可以绑定到非const引用。,它具有以下示例代码: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)会导致错误:

蝴蝶刀刀

正如其他人所说,这要归功于MicrosoftC+扩展。尽管/Za不建议使用标志,因为它会破坏事物。相反,请使用/permissive-切换到更好的标准遵从性,您将得到这些情况下的健康错误。请注意,此标志可从VS 2017开始使用。开关/za不支持某些关键的MicrosoftSDK头文件。相反/允许性-提供了一种有用的一致性模式,其中输入C+代码根据ISO C+规则进行解释,但也允许在VisualC+支持的目标上编译C+所需的一致性扩展。
随时随地看视频慕课网APP
我要回答