[转帖]无法将临时对象绑定到非常量引用

    在Visual C++以前的版本中,可以将非常量引用绑定到临时对象。 现在,只能将临时对象绑定到常量引用。

    示例:
    例如,与Visual Studio .NET相比,以下示例在Visual Studio .NET 2003中具有不同的运行时行为:

        #include "iostream"
        using namespace std;
        class C {};

        void f(C & c) { cout << "C&" << endl; }
        void f(C const & c) { cout << "C const &" << endl; }

        int main()
        {
           f(C());
        }

    Visual Studio 6.0中的输出:
        C&
    Visual Studio .NET 2003中的输出:
        C const &   
 

    参见:Visual C++ 编译器中的重大更改
    附注:规定临时对象只能绑定到常量引用,表示不能通过该引用改变临时对象的值,但是临时对象本身并不是const型的,C() = C();是允许的~

    另外,经本人测试,在VS2003或者VS2005中,如果去掉上面的f(C const& c)函数,不会产生编译错误,main()函数会正常调用f(C &c)函数,而且C &c = C()也能够通过编译,而这些在g++中却会产生编译错误。这说明VC编译器对C++标准的支持还不是很完全,g++编译器对代码的要求更加严格。

    原文地址:http://msdn.microsoft.com/zh-cn/cfbk5ddc.aspx

转载于:https://www.cnblogs.com/bigshow/archive/2008/11/08/1329858.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值