使用C ++ ostream(tostring)的最佳实践

时间:2013-05-21 16:04:43

标签: c++ tostring ostream

重载<<运算符时的最佳做法是什么。特别是,我如何区分指针上的操作与对象。是否犹豫是否在输入<<时输出相同的字符串?

例如,请考虑以下代码,其中Book个对象已初始化

Book b1;
Book* b2;

// initialization stuff

// can both of these output the same representation of a book object?
cout << b1 << endl;
cout << b2 << endl;

2 个答案:

答案 0 :(得分:2)

不要将operator<<重载为指针 - T。相反,重载T本身(或者更确切地说,const T&),并在调用operator<<时取消引用指针。

cout << *b2 << endl;

指针到T的重载只会造成混淆和潜在的名称冲突,如果你为const T&重载

,那么首先不是必要的

答案 1 :(得分:2)

  
    
      

如何区分指针上的操作与对象。

    
  

通过operator<<函数的签名:

std::ostream& operator<<(std::ostream&, const Book&); // operates on object
std::ostream& operator<<(std::ostream&, const Book*); // operates on pointer
  
    
      

他们两个都输出相同的字符串是否犹豫不决?

    
  

允许,但不是特别有用。很难看到第二种形式的实施。如果您想要实现第二种形式,请意识到它完全是多余的。例如,如果您有Book* pBook

std::cout << *pBook << "\n";

那将打印出pBook指向的对象。