Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. General talk
  3. The Lounge
  4. Hidden features of C++
Forum Updated to NodeBB v4.3 + New Features

Hidden features of C++

Scheduled Pinned Locked Moved Unsolved The Lounge
19 Posts 7 Posters 2.6k Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • fcarneyF fcarney

    I find it amazing that hidden gems exist like this in C++.
    Coding for dyslexics:

    #include <QCoreApplication>
    #include <QDebug>
    #include <cstring>
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        // reverse indexing
        char str[]  = "Hello World";
        char str2[] = "Beano Could";
    
        qInfo() << str;
    
        for(int i=0; i<strlen(str); ++i){
            int i2 = strlen(str) - 1;
            i[str] = (i2-i)[str2];
        }
    
        qInfo() << str;
    
        return a.exec();
    }
    
    kshegunovK Offline
    kshegunovK Offline
    kshegunov
    Moderators
    wrote on last edited by
    #4

    @fcarney said in Hidden features of C++:

    I find it amazing that hidden gems exist like this in C++

    Why do you find it amazing, and what's gemmy about it?

    Have fun with it: https://godbolt.org/z/gPiYxP
    The compiler just treats everything as pointer(s) and does the pointer addition as needed.

    Read and abide by the Qt Code of Conduct

    fcarneyF 1 Reply Last reply
    4
    • kshegunovK kshegunov

      @fcarney said in Hidden features of C++:

      I find it amazing that hidden gems exist like this in C++

      Why do you find it amazing, and what's gemmy about it?

      Have fun with it: https://godbolt.org/z/gPiYxP
      The compiler just treats everything as pointer(s) and does the pointer addition as needed.

      fcarneyF Offline
      fcarneyF Offline
      fcarney
      wrote on last edited by
      #5

      @kshegunov said in Hidden features of C++:

      Why do you find it amazing, and what's gemmy about it?

      Because its interesting and fun. It took a bit, but I found this explanation:

      What square brackets really mean
      
      Accessing an element of an array via ptr[3] is actually just short for *(ptr + 3). This can be equivalently written as *(3 + ptr) and therefore as 3[ptr], which turns out to be completely valid code. 
      

      Once its explained it makes complete sense. I was imagining some operator overloading function juxtaposition of terms nonsense.

      C++ is a perfectly valid school of magic.

      1 Reply Last reply
      0
      • fcarneyF Offline
        fcarneyF Offline
        fcarney
        wrote on last edited by
        #6

        @kshegunov said in Hidden features of C++:

        https://godbolt.org/z/gPiYxP

        Ooh, that is a cool website. Assembler right in a browser. Thanks!

        C++ is a perfectly valid school of magic.

        kshegunovK 1 Reply Last reply
        1
        • KroMignonK Offline
          KroMignonK Offline
          KroMignon
          wrote on last edited by
          #7

          @fcarney that's nothing special, it just simple pointer operation/arithmetic

          @VRonin cool website, didn't know it!

          It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

          1 Reply Last reply
          1
          • fcarneyF fcarney

            @kshegunov said in Hidden features of C++:

            https://godbolt.org/z/gPiYxP

            Ooh, that is a cool website. Assembler right in a browser. Thanks!

            kshegunovK Offline
            kshegunovK Offline
            kshegunov
            Moderators
            wrote on last edited by
            #8

            The guy with the site: https://www.youtube.com/watch?v=bSkpMdDe4g4 (also a very good talk).

            Read and abide by the Qt Code of Conduct

            1 Reply Last reply
            2
            • VRoninV Offline
              VRoninV Offline
              VRonin
              wrote on last edited by
              #9

              If you want to have more fun: https://www.ioccc.org/years.html
              For example: https://www.ioccc.org/2018/burton1/prog.nowarn.c

              "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
              ~Napoleon Bonaparte

              On a crusade to banish setIndexWidget() from the holy land of Qt

              1 Reply Last reply
              0
              • fcarneyF Offline
                fcarneyF Offline
                fcarney
                wrote on last edited by
                #10

                Here is another interesting site:
                http://madebyevan.com/obscure-cpp-features/

                C++ is a perfectly valid school of magic.

                1 Reply Last reply
                0
                • JonBJ Offline
                  JonBJ Offline
                  JonB
                  wrote on last edited by JonB
                  #11
                  i[str] = (i2-i)[str2];
                  

                  I'm going to throw this in here, and doubtless wait for others to disagree: I think the compiler should generate a warning on i[str]. Do I realize it's the same as str[i] --- yes, I do. Do I realize it's just the same as *(i + str), which I wouldn't complain about --- yes, I do. Bit I'd still like to see a friendly, 2019, open source compiler warning about i not being indexable....

                  EDIT "I think the compiler should": maybe I meant "I expected the compiler to"....

                  1 Reply Last reply
                  0
                  • fcarneyF Offline
                    fcarneyF Offline
                    fcarney
                    wrote on last edited by
                    #12

                    @JonB said in Hidden features of C++:

                    doubtless wait for others to disagree

                    Or the obligatory "My <insert language> doesn't do this. That is why it is superior."
                    cough cough rust cough cough... ;)

                    (disclaimer: I have never programmed rust)

                    C++ is a perfectly valid school of magic.

                    1 Reply Last reply
                    0
                    • fcarneyF Offline
                      fcarneyF Offline
                      fcarney
                      wrote on last edited by
                      #13

                      Now I am kinda scared:

                      qInfo() << 3<:"Foobar"];
                      

                      Outputs 'b'.
                      But this:

                      std::cout << 3<:"Foobar"];
                      

                      Crashes

                      I am really struggling as to how that translates to an index in the first case, but crashes in the second case.

                      C++ is a perfectly valid school of magic.

                      fcarneyF 1 Reply Last reply
                      0
                      • fcarneyF fcarney

                        Now I am kinda scared:

                        qInfo() << 3<:"Foobar"];
                        

                        Outputs 'b'.
                        But this:

                        std::cout << 3<:"Foobar"];
                        

                        Crashes

                        I am really struggling as to how that translates to an index in the first case, but crashes in the second case.

                        fcarneyF Offline
                        fcarneyF Offline
                        fcarney
                        wrote on last edited by
                        #14

                        @fcarney said in Hidden features of C++:

                        std::cout << 3<:"Foobar"];

                        Nevermind, it needs "\n" to output. It was crashing cause I was killing it... doh! I rarely use cout anymore.

                        C++ is a perfectly valid school of magic.

                        fcarneyF 1 Reply Last reply
                        0
                        • fcarneyF fcarney

                          @fcarney said in Hidden features of C++:

                          std::cout << 3<:"Foobar"];

                          Nevermind, it needs "\n" to output. It was crashing cause I was killing it... doh! I rarely use cout anymore.

                          fcarneyF Offline
                          fcarneyF Offline
                          fcarney
                          wrote on last edited by
                          #15

                          Also,
                          digraphs

                          Why? Why?!

                          C++ is a perfectly valid school of magic.

                          kshegunovK 1 Reply Last reply
                          0
                          • fcarneyF fcarney

                            Also,
                            digraphs

                            Why? Why?!

                            kshegunovK Offline
                            kshegunovK Offline
                            kshegunov
                            Moderators
                            wrote on last edited by
                            #16

                            @fcarney said in Hidden features of C++:

                            digraphs

                            That's some bag-o-worms. My advice - don't dig there.

                            Read and abide by the Qt Code of Conduct

                            1 Reply Last reply
                            0
                            • Kent-DorfmanK Offline
                              Kent-DorfmanK Offline
                              Kent-Dorfman
                              wrote on last edited by
                              #17

                              I think the take-away from this discussion is that if you want to write code to really piss off someone else who has to read or maintain it then use C++.

                              JonBJ 1 Reply Last reply
                              1
                              • Kent-DorfmanK Kent-Dorfman

                                I think the take-away from this discussion is that if you want to write code to really piss off someone else who has to read or maintain it then use C++.

                                JonBJ Offline
                                JonBJ Offline
                                JonB
                                wrote on last edited by JonB
                                #18

                                @Kent-Dorfman
                                No, C++ readability/maintenance has nothing on this little gem language, which has always been a favorite of mine: https://en.wikipedia.org/wiki/Brainfuck. Here, for example, is Hello World! in its entirety:

                                ++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
                                

                                And you can go to https://sange.fi/esoteric/brainfuck/impl/interp/i.html to paste it in and run :)

                                ODБOïO 1 Reply Last reply
                                1
                                • JonBJ JonB

                                  @Kent-Dorfman
                                  No, C++ readability/maintenance has nothing on this little gem language, which has always been a favorite of mine: https://en.wikipedia.org/wiki/Brainfuck. Here, for example, is Hello World! in its entirety:

                                  ++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
                                  

                                  And you can go to https://sange.fi/esoteric/brainfuck/impl/interp/i.html to paste it in and run :)

                                  ODБOïO Offline
                                  ODБOïO Offline
                                  ODБOï
                                  wrote on last edited by ODБOï
                                  #19

                                  @JonB there is also Malbolge, but i don't thik this languages are designed to write real programs.

                                  hello world

                                  ('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#"
                                  `CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>
                                  
                                  1 Reply Last reply
                                  1

                                  • Login

                                  • Login or register to search.
                                  • First post
                                    Last post
                                  0
                                  • Categories
                                  • Recent
                                  • Tags
                                  • Popular
                                  • Users
                                  • Groups
                                  • Search
                                  • Get Qt Extensions
                                  • Unsolved