繁体   English   中英

重载运算符<<返回ostream&

[英]Overloaded operator<< returning ostream&

我在示例应用程序中有以下代码:

ostream& operator<< (ostream& os, const ReferenceTest& rt)
{
    os << rt.counter;  //In this scenario, rt has a public int called counter
}

我很惊讶地发现使用GCC 4.6.1编译该代码时没有出现问题。 由于我所期望的原因,在使用Visual Studio 2010时失败,即我没有返回对ostream的引用。 但是,在两个平台上编译时程序的输出是相同的(我有一个写测试输出的琐碎的main())。

哪个符合标准? 我在这里错过明显的东西吗?

-德里克

您在启用警告的情况下进行编译吗? 我得到warning: control reaches end of non-void function使用g ++, warning: control reaches end of non-void function

您当然不希望编译器在代码中的第一个错误时停止。 您希望它能在一次膨胀中尽可能多地捕获。 为此,编译器必须修补您的错误代码,以便可以继续执行。 在这种情况下,补丁很明显:返回作为参数提供的流。

永远不要相信编译器免费提供的那些“修复程序”。 他们什么都不是免费的。 改正您的代码。

并始终在启用警告的情况下进行编译。

缺少除return语句之外的其他内容? 缺少它是未定义的行为(对于这种简单情况,我什至希望它是编译时错误)。 可能会发生os << rt.counter表达式的返回值恰好位于期望整个operator<<的返回值的相同位置的情况,这使其偶然地起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM