在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++编译器对代码的要求更加严格。