簡體   English   中英

重載<<在C ++中的運算符-為什么返回類型是引用std :: ostream&

[英]Overloading the << operator in C++ -why return type is a reference std::ostream&

我正在閱讀有關在C ++中重載<<運算符的教程

我試圖理解為什么返回類型是引用std::ostream& 本教程說

如果嘗試按值返回std :: ostream,則會收到編譯器錯誤。 發生這種情況是因為std :: ostream明確禁止復制。

有人可以解釋std::ostream被復制了嗎?

   std::ostream& operator<< (std::ostream &out, const Point &point)
{
    // Since operator<< is a friend of the Point class, we can access Point's members directly.
    out << "Point(" << point.m_x << ", " << point.m_y << ", " << point.m_z << ")";

    return out;
} 

在C ++中,當您執行以下操作時,將復制對象:

  1. 使用=定義變量
  2. 將其作為參數傳遞給非引用類型的參數
  3. 從返回類型為非引用的函數返回它
  4. 使用花括號初始化數組或聚合類

在第三種情況下,如果返回類型為std::ostream則將復制'out'。 所以應該是std::ostream& (您可能會注意到,第一個參數的類型也是std::ostream& ,避免復制)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM