Am 03.03.15 um 12:12 schrieb Chris Angelico: > On Tue, Mar 3, 2015 at 7:51 PM, Christian Gollwitzer <aurio...@gmx.de> wrote: > >> Are you trying to pick on C++ streams? I could never understand why >> anybody has problems with an arrow << that means "put into the left >> thing" instead of "shift the bits to the left". How often do you use >> bitshift operations in your programs as opposed to output? Ot would be >> equally silly to complain, that in Python you divide a string by a >> tuple, and the modulus gives you a formatted string. > > I am, yes. Both your examples seem lovely and simple when you first > look at them, but operator precedence means you get weird edge cases. > In the case of string modulo, there's another edge case as a > consequence of the operator being, by necessity, binary. A function > call makes better sense here.
I can agree with the argument that operator precedence can make problems; e.g. this cout<<a==b; does not output the truth value of a==b, but instead outputs a and compares the stream to b (which will usually fail to compile, but still). But the argument that << is a left-shift and nothing else is silly. << for bitshift is nothing more intuitive than % for modulus (where in math does this symbol occur?) or [] for indexing. We just got used to it, and to me << as an arrow for putting someting into a stream seems pretty obvious. > Operator overloading in each case here is "cute", not optimally practical. Maybe just sub-optimal? With today's C++ one could use a variadic template and still have type-safe compile-time bound output formatting. This hasn't been possible in the original iostream library back then. Christian -- https://mail.python.org/mailman/listinfo/python-list