Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 72291
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 10, 20262026-05-10T20:01:18+00:00 2026-05-10T20:01:18+00:00

That’s basically the question, is there a right way to implement operator<< ? Reading

  • 0

That’s basically the question, is there a ‘right’ way to implement operator<< ? Reading this I can see that something like:

friend bool operator<<(obj const& lhs, obj const& rhs); 

is preferred to something like

ostream& operator<<(obj const& rhs); 

But I can’t quite see why should I use one or the other.

My personal case is:

friend ostream & operator<<(ostream &os, const Paragraph& p) {     return os << p.to_str(); } 

But I could probably do:

ostream & operator<<(ostream &os) {     return os << paragraph; } 

What rationale should I base this decision on?

Note:

 Paragraph::to_str = (return paragraph)  

where paragraph’s a string.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. 2026-05-10T20:01:18+00:00Added an answer on May 10, 2026 at 8:01 pm

    The problem here is in your interpretation of the article you link.

    Equality

    This article is about somebody that is having problems correctly defining the bool relationship operators.

    The operator:

    • Equality == and !=
    • Relationship < > <= >=

    These operators should return a bool as they are comparing two objects of the same type. It is usually easiest to define these operators as part of the class. This is because a class is automatically a friend of itself so objects of type Paragraph can examine each other (even each others private members).

    There is an argument for making these free standing functions as this lets auto conversion convert both sides if they are not the same type, while member functions only allow the rhs to be auto converted. I find this a paper man argument as you don’t really want auto conversion happening in the first place (usually). But if this is something you want (I don’t recommend it) then making the comparators free standing can be advantageous.

    Streaming

    The stream operators:

    • operator << output
    • operator >> input

    When you use these as stream operators (rather than binary shift) the first parameter is a stream. Since you do not have access to the stream object (its not yours to modify) these can not be member operators they have to be external to the class. Thus they must either be friends of the class or have access to a public method that will do the streaming for you.

    It is also traditional for these objects to return a reference to a stream object so you can chain stream operations together.

    #include <iostream>  class Paragraph {     public:         explicit Paragraph(std::string const& init)             :m_para(init)         {}          std::string const&  to_str() const         {             return m_para;         }          bool operator==(Paragraph const& rhs) const         {             return m_para == rhs.m_para;         }         bool operator!=(Paragraph const& rhs) const         {             // Define != operator in terms of the == operator             return !(this->operator==(rhs));         }         bool operator<(Paragraph const& rhs) const         {             return  m_para < rhs.m_para;         }     private:         friend std::ostream & operator<<(std::ostream &os, const Paragraph& p);         std::string     m_para; };  std::ostream & operator<<(std::ostream &os, const Paragraph& p) {     return os << p.to_str(); }   int main() {     Paragraph   p('Plop');     Paragraph   q(p);      std::cout << p << std::endl << (p == q) << std::endl; } 
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 87k
  • Answers 87k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer Have you tried putting + itemIDs+ in single quotes? May 11, 2026 at 5:29 pm
  • Editorial Team
    Editorial Team added an answer #pragma pack http://msdn.microsoft.com/en-us/library/2e70t5y1(VS.80).aspx May 11, 2026 at 5:29 pm
  • Editorial Team
    Editorial Team added an answer How about you read a tutorial on HTML forms? The… May 11, 2026 at 5:29 pm

Related Questions

Is it possible to replace javascript w/ HTML if JavaScript is not enabled on
I am currently running into a problem where an element is coming back from
I ran into a problem. Wrote the following code snippet: teksti = teksti.Trim() teksti
That is, I'd like to have a tuple of values. The use case on
That's it. If you want to document a function or a class, you put

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.