非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)会导致错误:
蝴蝶刀刀
TA贡献1801条经验 获得超8个赞
正如其他人所说,这要归功于MicrosoftC+扩展。尽管/Za
不建议使用标志,因为它会破坏事物。
相反,请使用/permissive-
切换到更好的标准遵从性,您将得到这些情况下的健康错误。请注意,此标志可从VS 2017开始使用。
开关/za不支持某些关键的MicrosoftSDK头文件。相反/允许性-提供了一种有用的一致性模式,其中输入C+代码根据ISO C+规则进行解释,但也允许在VisualC+支持的目标上编译C+所需的一致性扩展。
- 2 回答
- 0 关注
- 455 浏览
添加回答
举报
0/150
提交
取消