cin/ofstream 的不同输出格式
Different output format for cin/ofstream
简介及相关信息:
假设我有以下 class:
class Example
{
int m_a;
int m_b;
public:
// usual stuff, omitted for brevity
friend ostream & operator<< (ostream & os, const Example &e)
{
return os << m_a << m_b;
}
};
问题:
我想保留 cin
的默认行为,但写入 ofstream
时采用以下格式:
m_a , m_b
我为解决这个问题所做的努力:
我试过在这里搜索,但没有找到任何类似的问题。
我已经尝试在线搜索,但仍然没有找到任何有用的信息。
我尝试添加
friend ofstream & operator<< (ofstream & ofs, const Example &e)
{
return ofs << m_a << ',' << m_b;
}
转换为 class,但这会产生编译器错误。老实说,这种做法感觉不对,但我不得不尝试一下,然后才来这里寻求帮助。
链接运算符时,所有标准 <<
都将 return 引用 ostream&
。
那么您的 return ...
将不起作用,因为该值与 ofstream&
return 类型不匹配。
只需在您的用户定义 operator<<
中使用 ostream&
,它应该可以工作。
一个字符串的语法是"S"
,即使它是一个字符字符串。 fstream
采用字符串而不是字符。因此,这应该有效:
friend ofstream & operator<< (ofstream & ofs, const Example &e)
{
ofs << e.m_a << "," << e.m_b; // " instead of '
return ofs;
}
我最初以为您只是忘记了实现中的对象 e。
friend ostream & operator<< (ofstream & ofs, const Example &e)
{
return ((ostream&) ofs) << e.m_a << ',' << e.m_b;
}
根据以下解释,class 中带有 2 个参数的朋友二元运算符本质上是在 class 主体中声明的外部方法。
但是在用 clang++ 编译之后,ofstream << int 抱怨错误:二进制表达式的无效操作数 ('ofstream' (aka 'basic_ofstream') and 'int') 你也应该将演员表添加到 ostream。
事实上 ofstream << int 不知道是应该使用 ofstream << Equation 还是 ostream << int 并且歧义导致编译错误。
所以你应该意识到可能产生未来编译错误的重载。
简介及相关信息:
假设我有以下 class:
class Example
{
int m_a;
int m_b;
public:
// usual stuff, omitted for brevity
friend ostream & operator<< (ostream & os, const Example &e)
{
return os << m_a << m_b;
}
};
问题:
我想保留 cin
的默认行为,但写入 ofstream
时采用以下格式:
m_a , m_b
我为解决这个问题所做的努力:
我试过在这里搜索,但没有找到任何类似的问题。
我已经尝试在线搜索,但仍然没有找到任何有用的信息。
我尝试添加
friend ofstream & operator<< (ofstream & ofs, const Example &e)
{
return ofs << m_a << ',' << m_b;
}
转换为 class,但这会产生编译器错误。老实说,这种做法感觉不对,但我不得不尝试一下,然后才来这里寻求帮助。
链接运算符时,所有标准 <<
都将 return 引用 ostream&
。
那么您的 return ...
将不起作用,因为该值与 ofstream&
return 类型不匹配。
只需在您的用户定义 operator<<
中使用 ostream&
,它应该可以工作。
一个字符串的语法是"S"
,即使它是一个字符字符串。 fstream
采用字符串而不是字符。因此,这应该有效:
friend ofstream & operator<< (ofstream & ofs, const Example &e)
{
ofs << e.m_a << "," << e.m_b; // " instead of '
return ofs;
}
我最初以为您只是忘记了实现中的对象 e。
friend ostream & operator<< (ofstream & ofs, const Example &e)
{
return ((ostream&) ofs) << e.m_a << ',' << e.m_b;
}
根据以下解释,class 中带有 2 个参数的朋友二元运算符本质上是在 class 主体中声明的外部方法。
但是在用 clang++ 编译之后,ofstream << int 抱怨错误:二进制表达式的无效操作数 ('ofstream' (aka 'basic_ofstream') and 'int') 你也应该将演员表添加到 ostream。
事实上 ofstream << int 不知道是应该使用 ofstream << Equation 还是 ostream << int 并且歧义导致编译错误。
所以你应该意识到可能产生未来编译错误的重载。