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 并且歧义导致编译错误。

所以你应该意识到可能产生未来编译错误的重载。