为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
小唯快跑啊 2019-06-25 15:26:04
非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++会抱怨的。相当矛盾的行为。思想?
查看完整描述

2 回答

?
www说

TA贡献1775条经验 获得超8个赞

这是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)会导致错误:


查看完整回答
反对 回复 2019-06-25
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

正如其他人所说,这要归功于MicrosoftC+扩展。尽管/Za不建议使用标志,因为它会破坏事物。

相反,请使用/permissive-切换到更好的标准遵从性,您将得到这些情况下的健康错误。请注意,此标志可从VS 2017开始使用。

开关/za不支持某些关键的MicrosoftSDK头文件。相反/允许性-提供了一种有用的一致性模式,其中输入C+代码根据ISO C+规则进行解释,但也允许在VisualC+支持的目标上编译C+所需的一致性扩展。


查看完整回答
反对 回复 2019-06-25
  • 2 回答
  • 0 关注
  • 455 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信