关于非const引用作参数的函数能否接受临时对象的问题
近段时间在学习C++编程思想,在学到常量这一章时有个问题始终无法理解.书上说:临时变量有这么一种情况:它们自动成为常量.然后有一个示例:
//: C08:ConstTemporary.cpp
// Temporaries are const
class X {};
X f() { return X(); } // Return by value
void g1(X&) {} // Pass by non-const reference
void g2(const X&) {} // Pass by const reference
int main() {
// Error: const temporary created by f():
//! g1(f());////这一句?????????
// OK: g2 takes a const reference:
g2(f());
return 0;
} ///:~
问题在于g1(f())并不是像书上说的会出错或者出警告.我用VC6.0,编译顺利通过,也没有警告.f()产生临时对象传递给g1(),但g1()并不是像书上说的那样参数必须是const引用.难道是VC6.0对C++标准在这一点上不支持?麻烦高手帮小弟指点指点!!!