std::ofstream( "out.txt") << "this
should go to out.txt";
// 或者
std::stringstr = "this should be printed to a file";
std::ofstream( "out2.txt") << str;
如你所见,这段代码可以在某些平台上编译通过,在某些平台上则不能通过编译。
按照ANSI C++标准,临时变量是右值(rvalue)。该标准引起了一个有趣的矛盾,因为你可以调用临时对象的非const型函数,但是如果你想通过参数的方法把临时变量传递给一个函数,你只能把它当做const型参数传递,如下面代码所示:
class CTest {};
void use_const_test( const CTest &)
{}
void use_NON_const_test( CTest &)
{}
int main()
{
// 编译通过:向临时变量传递const型参数
use_const_test( CTest());
// 编译错误:试图把非const型参数传递给临时变量
use_NON_const_test( CTest());
return 0;
}
你可以用下面的方法来重载运算符“<<”:
这样,下面的代码:
std::ofstream( "out.txt") << value1;
根据STL实现的不同,某个重载运算符是否按照成员函数实现是不确定的。这样,代码可能在某个平台上编译通过,但在另一个平台上却编译失败。这就造成了代码不可移植。
注意:如果代码编译失败,错误信息可能会很模糊。例如,GCC
3.2编译器给出如下错误信息:
no match for 'std::ofstream << std::string&' operator. Candidates are ...