Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #82255

Re: That's while I love C++ over C

From Keith Thompson <Keith.S.Thompson+u@gmail.com>
Newsgroups comp.lang.c++
Subject Re: That's while I love C++ over C
Date 2021-11-06 13:27 -0700
Organization None to speak of
Message-ID <87fss9xc5s.fsf@nosuchdomain.example.com> (permalink)
References (5 earlier) <sm5234$ff1$2@dont-email.me> <sm53gd$nse$1@dont-email.me> <sm53oi$o51$2@redfloyd.dont-email.me> <87r1btygxh.fsf@nosuchdomain.example.com> <sm5oo7$cae$1@dont-email.me>

Show all headers | View raw


David Brown <david.brown@hesbynett.no> writes:
> On 06/11/2021 06:46, Keith Thompson wrote:
>> red floyd <no.spam.here@its.invalid> writes:
[...]
>>> As with everything else in C++, there's nothing wrong with the
>>> conditional operator ... in the right place.  The left hand side of
>>> an assignment is NOT the right place.  Using the result of a conditional
>>> as an rvalue is just fine, I use it all the time.
>> 
>> Why?
>> 
>> Seriously, the C++ standard (unlike the C standard) is clear that a
>> conditional expression can be an lvalue if its second and third operands
>> are both lvalues of the same type (I'm oversimplifying the rules a bit).
>> In other words, the language explicitly allows a conditional expression
>> to be the LHS of an assignment.  Why do you object to taking advantage
>> of that feature?
>> 
>> I don't think I knew about it before seeing this discussion, but now
>> that I do, the meaning of
>> 
>>     (x == y ? a : b) = c;
>> 
>> seems perfectly clear to me.  The alternative:
>> 
>>     if (x == y) {
>>         a = c;
>>     }
>>     else {
>>         b = c;
>>     }
>> 
>> is more verbose and could be problematic if c is a complicated
>> expression; the risk is that a later maintainer might modify one
>> instance of c and not the other.  
>
> That is a poor argument, IMHO, as it is so easily solved :
>
> 	auto new_c = complicated_expression;
> 	if (x == y) {
> 		a = new_c;
> 	} else {
> 		b = new_c;
> 	}

To be clear, I respect your opinion.  I just don't share it in this
case.

I don't see your replacement code as a "solution", because I don't see
the shorter version as a problem.  Expanding one line to six can make
sense in some cases.  I just don't see this as one of those cases.

In my humble opinion, the biggest barrier to understanding

    (x == y ? a : b) = c;

is knowing that a conditional expression can appear on the LHS of an
assignment, i.e., that it can be an lvalue.  Any C or C++ programmer
should already understand that the LHS of an assignment is an expression
that's evaluated to determine what object is to be assigned to.  Once
you realize that a conditional expression can be an lvalue, the meaning
**IMHO** becomes obvious.

Of course in real code you very probably wouldn't call the variables
x, y, a, b, and c.  With meaningful names, I suspect the intent of the
code would be clearer.

If I saw that line presented as C, my reaction would be that it's
illegal, but *if it were legal* the meaning would be obvious.

[...]

> "Always write code as though the person who will maintain it is a
> violent psychopath who knows where you live" (I've forgotten the source
> of that quotation).  Also assume they are not as clever or experienced
> as you are.

Apparently it originated in a post by John F. Woods, right here on
comp.lang.c++ in 1991.
https://groups.google.com/g/comp.lang.c++/c/rYCO5yn4lXw/m/oITtSkZOtoUJ?pli=1

I've always liked that quotation.

-- 
Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
Working, but not speaking, for Philips
void Void(void) { Void(); } /* The recursive call of the void */

Back to comp.lang.c++ | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

That's while I love C++ over C Bonita Montero <Bonita.Montero@gmail.com> - 2021-11-03 20:39 +0100
  Re: That's while I love C++ over C Bart <bc@freeuk.com> - 2021-11-03 20:28 +0000
    Re: That's while I love C++ over C Vir Campestris <vir.campestris@invalid.invalid> - 2021-11-05 21:59 +0000
      Re: That's while I love C++ over C Lynn McGuire <lynnmcguire5@gmail.com> - 2021-11-05 17:25 -0500
        Re: That's while I love C++ over C red floyd <no.spam.here@its.invalid> - 2021-11-05 16:24 -0700
          Re: That's while I love C++ over C Bart <bc@freeuk.com> - 2021-11-05 23:46 +0000
            Re: That's while I love C++ over C Tony Oliver <guinness.tony@gmail.com> - 2021-11-05 17:48 -0700
              Re: That's while I love C++ over C Bart <bc@freeuk.com> - 2021-11-06 01:40 +0000
              Re: That's while I love C++ over C Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-11-06 02:32 +0000
                Re: That's while I love C++ over C red floyd <no.spam.here@its.invalid> - 2021-11-05 20:18 -0700
                Re: That's while I love C++ over C "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2021-11-06 04:48 +0100
                Re: That's while I love C++ over C James Kuyper <jameskuyper@alumni.caltech.edu> - 2021-11-06 00:34 -0400
                Re: That's while I love C++ over C Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-11-05 22:48 -0700
                Re: That's while I love C++ over C red floyd <no.spam.here@its.invalid> - 2021-11-05 22:26 -0700
                Re: That's while I love C++ over C Bonita Montero <Bonita.Montero@gmail.com> - 2021-11-06 07:37 +0100
                Re: That's while I love C++ over C Bonita Montero <Bonita.Montero@gmail.com> - 2021-11-06 07:36 +0100
                Re: That's while I love C++ over C Ike Naar <ike@sdf.org> - 2021-11-06 06:59 +0000
                Re: That's while I love C++ over C David Brown <david.brown@hesbynett.no> - 2021-11-06 11:12 +0100
                Re: That's while I love C++ over C Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-11-06 11:08 +0000
                Re: That's while I love C++ over C Bonita Montero <Bonita.Montero@gmail.com> - 2021-11-06 15:03 +0100
                Re: That's while I love C++ over C Manfred <noname@add.invalid> - 2021-11-06 19:12 +0100
                Re: That's while I love C++ over C Bart <bc@freeuk.com> - 2021-11-06 18:57 +0000
                Re: That's while I love C++ over C Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-11-06 20:50 +0000
                Re: That's while I love C++ over C Bart <bc@freeuk.com> - 2021-11-06 11:44 +0000
                Re: That's while I love C++ over C Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-11-06 13:18 +0000
            Re: That's while I love C++ over C David Brown <david.brown@hesbynett.no> - 2021-11-06 10:58 +0100
              Re: That's while I love C++ over C Bart <bc@freeuk.com> - 2021-11-06 12:00 +0000
                Re: That's while I love C++ over C Öö Tiib <ootiib@hot.ee> - 2021-11-06 07:04 -0700
                Re: That's while I love C++ over C David Brown <david.brown@hesbynett.no> - 2021-11-06 15:50 +0100
            Re: That's while I love C++ over C scott@slp53.sl.home (Scott Lurndal) - 2021-11-06 14:43 +0000
              [OT] Algol68 Was: That's while I love C++ over C Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-11-06 17:13 +0000
                Re: [OT] Algol68 Was: That's while I love C++ over C scott@slp53.sl.home (Scott Lurndal) - 2021-11-06 20:16 +0000
                Re: [OT] Algol68 Was: That's while I love C++ over C Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-11-06 20:25 +0000
          Re: That's while I love C++ over C "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2021-11-05 21:59 -0700
            Re: That's while I love C++ over C "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2021-11-05 22:23 -0700
              Re: That's while I love C++ over C red floyd <no.spam.here@its.invalid> - 2021-11-05 22:27 -0700
                Re: That's while I love C++ over C red floyd <no.spam.here@its.invalid> - 2021-11-05 22:28 -0700
                Re: That's while I love C++ over C "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2021-11-05 22:46 -0700
                Re: That's while I love C++ over C Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-11-05 22:46 -0700
                Re: That's while I love C++ over C David Brown <david.brown@hesbynett.no> - 2021-11-06 12:25 +0100
                Re: That's while I love C++ over C Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-11-06 13:27 -0700
                Re: That's while I love C++ over C Manfred <noname@add.invalid> - 2021-11-07 00:38 +0100
                Re: That's while I love C++ over C Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-11-07 00:33 +0000
                Re: That's while I love C++ over C David Brown <david.brown@hesbynett.no> - 2021-11-07 15:10 +0100
                Re: That's while I love C++ over C James Kuyper <jameskuyper@alumni.caltech.edu> - 2021-11-08 01:47 -0500
      Re: That's while I love C++ over C Bart <bc@freeuk.com> - 2021-11-05 23:35 +0000
      Re: That's while I love C++ over C Bonita Montero <Bonita.Montero@gmail.com> - 2021-11-06 07:33 +0100

csiph-web