Does anyone have a summary of boilerplate declarations for C++ operator overloading?  A one page pdf would be nice.  It would help us forgetful people having to stop and think about where to put our const and & and friend etc.
            Asked
            
        
        
            Active
            
        
            Viewed 3,119 times
        
    10
            
            
         
    
    
        wxffles
        
- 864
- 6
- 20
- 
                    +1 it might also help self learners (like me) not going crazy (yep, just like me ;) ) – BlackBear Jan 23 '12 at 19:34
- 
                    7understanding is almost always better than copying. – AJG85 Jan 23 '12 at 19:35
- 
                    6Understanding and productivity aids aren't mutual exclusive. – Duck Jan 23 '12 at 19:39
- 
                    You should just read this, and learn the ins and outs of them. http://www.parashift.com/c++-faq-lite/operator-overloading.html – Josh Jan 23 '12 at 19:43
- 
                    1@Duck The point was with understanding the reference is no longer needed. Cheatsheets and google are fine for rarely used algorithms but when and why to use keywords such as `const` is something that should simply be known. – AJG85 Jan 23 '12 at 19:50
- 
                    1@AJG85 Agree that understanding should be first. Why isn't reference needed? Unless you have photographic memory... – Tae-Sung Shin Jan 23 '12 at 19:55
- 
                    @AJG85 - beyond the handful of common operators I would suggest most overloads do fall into the rarely used category for most people. I have set up a few templates for these in my editors. It doesn't relieve me of some copy & pasting nor thinking about the correctness of what I am inserting but it does eliminate some steps and starting from square one on things I may do once every six months. – Duck Jan 23 '12 at 19:59
- 
                    @AJG85: I frequently use a list to make sure I didn't miss any. There's been several times I'm making a number-like class and forgot `|=` – Mooing Duck Jan 23 '12 at 20:07
- 
                    1See http://stackoverflow.com/questions/4421706/operator-overloading – Ben Voigt Jan 23 '12 at 20:45
- 
                    I agree that's quite true for the less used operators. [This might be a useful reference](http://stackoverflow.com/questions/4421706/operator-overloading) – AJG85 Jan 23 '12 at 20:46
3 Answers
5
            Wikipedia has a pretty nice entry:
http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B
Complete with prototypes for both member and global functions, where applicable.
 
    
    
        pezcode
        
- 5,490
- 2
- 24
- 37
- 
                    That almost exactly what I was looking for. Just need someone to condense it down to a handy document I can take on the road. Might make one of my minions do it. Any suggestions for a good place to host and share such a document? – wxffles Jan 23 '12 at 21:26
- 
                    Ironically, [Gary Buyn](http://stackoverflow.com/users/749517/gary-buyn) had an almost identical answer 6 minutes earlier which he deleted. – Ben Voigt Jan 23 '12 at 21:38
1
            
            
        Summary:
- Assignment and compound assignment operators must be members, not friends. 
- Use the copy-and-swap idiom and pass-by-value for assignment operators. This gives you exception safety and handles the "assign-to-self" case. 
- Operators where the custom class can appear as either operand should be friends. 
 
    
    
        Ben Voigt
        
- 277,958
- 43
- 419
- 720
- 
                    Not exactly what I was after, but you make some good points that should be included in a cheat sheet. – wxffles Jan 23 '12 at 21:27
0
            
            
        The SPARKCHARTS C++ reference sheet has a nice mini-summary of operator overloading. They were kind enough to put it up on the Web:
 
    
    
        ahoffer
        
- 6,347
- 4
- 39
- 68
- 
                    3...and they aren't using `const` right, so this really doesn't answer the OP's question. – Ben Voigt Jan 23 '12 at 19:40
- 
                    Agreed. Const correctness is worth considering. How would you re-write the Sparkchart summary to include const correctness? (In fact, how would a C++ maven re-write the Sparkchart summary to be, in general, more useful?) – ahoffer Jan 23 '12 at 19:51