Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Ternary operator in C++

  1. Sep 3, 2015 #1
    • Member warned about posting questions that could be easily answered in a web search
    What is ternary operator in c++ and its use?
     
  2. jcsd
  3. Sep 3, 2015 #2
    It's used as a switch.

    Code (C):
    if (i == 10){
        return 5;
    } else {
        return 1;
    }
    Is functionally the same as

    Code (C):
    return (i == 10) ? 5 : 1
    The ? : set is the ternary operator: (bool ? ifTrue : ifFalse) will resolve to either ifTrue or ifFalse depending on the value of bool.

    It's used for shorthand, or for a case where you want to alter the behavior of something based on something else inline. Practical example:
    Code (C):
    void printfString(const char * format, const char * str){
        printf(format, (str == NULL ? "NULL" : str));
    }
     
  4. Sep 3, 2015 #3
    Have you used google?

    First result with some pitfalls: http://www.cplusplus.com/forum/articles/14631/

    It's usually applied in simple return statements.

    for example this is how you could implement a max-function

    Code (C):

    double fmax( double a, double b){
       return (a > b) ? a : b;
    }
     
    I would generally avoid using the ternary operation.
    It can make your code hard to read.

    Edit:
    Too slow :)
     
  5. Sep 3, 2015 #4

    D H

    User Avatar
    Staff Emeritus
    Science Advisor

    I so disagree. When used to excess or otherwise inappropriately, the ternary operator does indeed make ones code hard to read. However, when used correctly, the ternary operator makes ones code much more compact and much easier to read.

    I have an ongoing disagreement with a vice president of the company I work for regarding the ternary operator. Yes, the ternary operator most certainly can be used in a way that can make ones code a good candidate for the IOCCC (the International Obfuscated C Code Contest). But then again, so can the dot operator:
    Code (Text):
    // Don't do this.
    foo().bar->baz(qux)->quux.quuux->quuuux();
    Note well: The above violates the law of Demeter, aka the "don't talk to strangers" rule.

    The easy rule is to ban the use of the dot operator, but nobody does that. So why are so many people so willing to ban the use of the ternary operator just because it can, when used to excess, make code hard to read?

    The right rule, to me, is
    • Never use the ternary operator as an lvalue.
      Code (Text):
      // Don't do this.
      (set_a ? a : b) = 42;
    • Don't chain the ternary operator.
      Code (Text):
      // Don't do this.
      x = condition_a ?
        (condition_b ?
          (condition_c ? 0 : 1) : (condition_d ? 2 : 3)) ?
        (condition_e ? 4 : 5);
    • If it makes more sense to use an if statement, do so.
      Code (Text):
      // I can't think of a good example. I like the ternary operator.
    • If it makes more sense to use the ternary operator, do so!
      Code (Text):
      //Do this!
      std::cout << (success ? "Success!" ? "Failure.") << '\n';
     
    Last edited: Sep 3, 2015
  6. Sep 4, 2015 #5
    That's actually illegal unless both a and b are references, this would be the proper way to write that.
    Code (Text):
    set_a ? (a = 42) : (b = 42);
    But yeah, that's awful code.
     
  7. Sep 4, 2015 #6
    So I checked it out again in one of my books.
    It gave some more examples and I agree, the notation is practical.

    I guess it's a remnant of studying code only in my early teens.
    A lot of resources strictly warned against, probably because they didn't want to write a longer post.
     
  8. Sep 4, 2015 #7

    D H

    User Avatar
    Staff Emeritus
    Science Advisor

    It is totally legal in C++, even if they aren't references. (The ternary operator in C isn't quite that powerful.)

    Live demo: https://ideone.com/O7csXR

    But just because it's legal doesn't mean you should use it.
     
    Last edited: Sep 4, 2015
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Ternary operator in C++
  1. C++ operator classes (Replies: 9)

  2. Ternary operator in C (Replies: 13)

Loading...