Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. Why I hate C++

Why I hate C++

Scheduled Pinned Locked Moved The Lounge
c++question
60 Posts 23 Posters 0 Views 1 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.
  • R Rage

    OriginalGriff wrote:

    if you try hard.

    And the lazies use VB.

    Do not escape reality : improve reality !

    K Offline
    K Offline
    kalberts
    wrote on last edited by
    #20

    I remember "PEEK(address)" and "POKE address, value" as dearly loved functions, but that was in the DOS days. If my memory is correct, it never made it into Visual Basic, though. (I guess it would be more or less meaningless, too, considering the memory management of Windows.)

    1 Reply Last reply
    0
    • T TheGreatAndPowerfulOz

      What you should really be hating on is the abhorrent coder not the language. That's like hating the hammer that was used to build the crappy shack you live in.

      #SupportHeForShe Government can give you nothing but what it takes from somebody else. A government big enough to give you everything you want is big enough to take everything you've got, including your freedom.-Ezra Taft Benson You must accept 1 of 2 basic premises: Either we are alone in the universe or we are not alone. Either way, the implications are staggering!-Wernher von Braun

      M Offline
      M Offline
      Munchies_Matt
      wrote on last edited by
      #21

      Oh I do, dont worry, but C++ allows this kind of crap to happen.

      T 1 Reply Last reply
      0
      • M Munchies_Matt

        Oh I do, dont worry, but C++ allows this kind of crap to happen.

        T Offline
        T Offline
        TheGreatAndPowerfulOz
        wrote on last edited by
        #22

        so does every other language that is of any use beyond kiddie crap.

        #SupportHeForShe Government can give you nothing but what it takes from somebody else. A government big enough to give you everything you want is big enough to take everything you've got, including your freedom.-Ezra Taft Benson You must accept 1 of 2 basic premises: Either we are alone in the universe or we are not alone. Either way, the implications are staggering!-Wernher von Braun

        M 1 Reply Last reply
        0
        • T TheGreatAndPowerfulOz

          so does every other language that is of any use beyond kiddie crap.

          #SupportHeForShe Government can give you nothing but what it takes from somebody else. A government big enough to give you everything you want is big enough to take everything you've got, including your freedom.-Ezra Taft Benson You must accept 1 of 2 basic premises: Either we are alone in the universe or we are not alone. Either way, the implications are staggering!-Wernher von Braun

          M Offline
          M Offline
          Munchies_Matt
          wrote on last edited by
          #23

          C++ positively invite this kind of ridiculousness. Give a man a hammer, and everything is a nail. Give a language feature x and every one has to abuse it. C++ has more of these than any other language I have used, ADA, VB, Java, Small Talk, Prolog and of course C, way more.

          1 Reply Last reply
          0
          • D dan sh

            Suddenly a wild overloaded operator appears... Try stand up comedy. :)

            "It is easy to decipher extraterrestrial signals after deciphering Javascript and VB6 themselves.", ISanti[^]

            1 Offline
            1 Offline
            11917640 Member
            wrote on last edited by
            #24

            As our program manager said once: After object-oriented design course every programmer writes only singleton classes.

            1 Reply Last reply
            0
            • M Munchies_Matt

              some_array[value];

              [] is over ridden and is commented as // find element matching _Keyval or insert with default mapped Which actually means 'insert it at the end of the list'. Why not a function called 'add_to_map_at_end'? Christ I hate C++ sometimes, it is so up its arse pointless at times.

              1 Offline
              1 Offline
              11917640 Member
              wrote on last edited by
              #25

              As our program manager said once: After object-oriented design course every programmer writes only singleton classes.

              1 Reply Last reply
              0
              • D den2k88

                Any 20 years old code base saw its sharse of clowns, especially the self-taught enthusiast that follow any "guru" blindly. I had such a colleague, luckily he went out slamming the door... unfortunately he had 10 years to make damages. I recently had to update some of his code and I was happy that he was no longer in my proxymity or I would be writing this from behind bars.

                GCS d-- s-/++ a- C++++ U+++ P- L+@ E-- W++ N+ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X

                M Offline
                M Offline
                Munchies_Matt
                wrote on last edited by
                #26

                I have come across some right howlers in this code base. Anyway, C++, of all the languages I have used, from ADA, to Prolog, through VB and Java, allows this kind of sillyness. So it is for that that I condemn it. And personally I dont see that OO is a massive benefit over a procedural language except in specific instances. And in fact it is often worse. Particularly in control code, code that is not data centric, but process centric.

                D S 2 Replies Last reply
                0
                • J jeron1

                  While I agree with your statement, std::map implements this very [] operator overload as described. Actually that comment is a nice addition. Would I implement something like that though? probably not.

                  "the debugger doesn't tell me anything because this code compiles just fine" - random QA comment "Facebook is where you tell lies to your friends. Twitter is where you tell the truth to strangers." - chriselst "I don't drink any more... then again, I don't drink any less." - Mike Mullikins uncle

                  M Offline
                  M Offline
                  Munchies_Matt
                  wrote on last edited by
                  #27

                  Quite, this is in the map object. Obscene is isnt it, that such an abortion as this is used so widely.

                  L 1 Reply Last reply
                  0
                  • K kalberts

                    One reason to dislike C(++) is that it provides excellent tools for a programmer to make a mess in a very simple way. In the earlier days, you could see quite a few horrible cases of poiner arithmetic - and the programmers were proud of it, proud of how they could do things that were impossible in toy languages like Pascal that gave you a slap on your fingers for just addressing outside the array limits, and introducing artificial differences between a pointer to the start of an array and the array itself. Every knowledgeabler person should know that they are the same! Fortunately, intricate pointer arithmetic is no longer the way to prove your skills. OO techniques has been more popular for that for at least 15-20 years. Virtual functions and overrides may be terribly abused, too, and what is the big difference bewtween operator overloading and virtual functions, at the conceptual level?

                    M Offline
                    M Offline
                    Munchies_Matt
                    wrote on last edited by
                    #28

                    Member 7989122 wrote:

                    the programmers were proud of it,

                    This is a problem in any language, and exactly what I am getting at here.l C++ give bedroom nerd programmers who think complexity is good the chance to do this. Real engineers dont.

                    Member 7989122 wrote:

                    what is the big difference bewtween operator overloading and virtual functions

                    Huge. An overridden function is subclass specialisation. An operator overload is supposed to *improve* the operator's functionality specifically for that class. In fact without overloading that operator might be dangerous. Take the classic 'class contains an allocated pointer' and not overriding the '=' operator. The class being copied to needs new memory allocating, and the contents copied to it. This is good. This is logical. Using [] to add a member to the end of an array is just stupid.

                    K 2 Replies Last reply
                    0
                    • I Ian Bell 2

                      -1 for blaming an excellent tool when the real problem lies with (s)he who uses it...

                      History is the joke the living play on the dead.

                      M Offline
                      M Offline
                      Munchies_Matt
                      wrote on last edited by
                      #29

                      Actually this is in the STL library, the map object, pretty much a part of C++. So yeah, it sucks.

                      I 1 Reply Last reply
                      0
                      • M Munchies_Matt

                        Actually this is in the STL library, the map object, pretty much a part of C++. So yeah, it sucks.

                        I Offline
                        I Offline
                        Ian Bell 2
                        wrote on last edited by
                        #30

                        I've used STL extensively for decades and std::map is not the problem as mentioned in your OP. As you pointed out, the overridden function was incorrectly implemented so again, the fault lies with the developer and not the language. Technically speaking, STL is a library implemented in C++. So your OP would better have been title "Why I hate STL" (where you probably would have found a much more accepting audience). Cheers, Ian

                        History is the joke the living play on the dead.

                        M 1 Reply Last reply
                        0
                        • I Ian Bell 2

                          I've used STL extensively for decades and std::map is not the problem as mentioned in your OP. As you pointed out, the overridden function was incorrectly implemented so again, the fault lies with the developer and not the language. Technically speaking, STL is a library implemented in C++. So your OP would better have been title "Why I hate STL" (where you probably would have found a much more accepting audience). Cheers, Ian

                          History is the joke the living play on the dead.

                          M Offline
                          M Offline
                          Munchies_Matt
                          wrote on last edited by
                          #31

                          Here you go: vc-19-changes/unordered_map at master · icestudent/vc-19-changes · GitHub[^]

                          I 1 Reply Last reply
                          0
                          • M Munchies_Matt

                            I have come across some right howlers in this code base. Anyway, C++, of all the languages I have used, from ADA, to Prolog, through VB and Java, allows this kind of sillyness. So it is for that that I condemn it. And personally I dont see that OO is a massive benefit over a procedural language except in specific instances. And in fact it is often worse. Particularly in control code, code that is not data centric, but process centric.

                            D Offline
                            D Offline
                            den2k88
                            wrote on last edited by
                            #32

                            I beg to differ, there are always pieces of information in a process which are data-centric, and applying OO correctly will break up processes in subprocess objects that are easier to isolate, replicate, store, observe and even parallelize. I do intermix procedural and OO because pure OOP more often than not introduces complexity trying to fit square pegs in round holes, but that's precisely why I like C++ and not the oter OOP languages: it's C, but with 100% OO support.

                            GCS d-- s-/++ a- C++++ U+++ P- L+@ E-- W++ N+ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X

                            M 1 Reply Last reply
                            0
                            • D den2k88

                              I beg to differ, there are always pieces of information in a process which are data-centric, and applying OO correctly will break up processes in subprocess objects that are easier to isolate, replicate, store, observe and even parallelize. I do intermix procedural and OO because pure OOP more often than not introduces complexity trying to fit square pegs in round holes, but that's precisely why I like C++ and not the oter OOP languages: it's C, but with 100% OO support.

                              GCS d-- s-/++ a- C++++ U+++ P- L+@ E-- W++ N+ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X

                              M Offline
                              M Offline
                              Munchies_Matt
                              wrote on last edited by
                              #33

                              den2k88 wrote:

                              there are always pieces of information in a process which are data-centric

                              Often not with drivers. In fact many are pure process and have no data of their own. They have states, flags, plenty of that, but no data.

                              D 1 Reply Last reply
                              0
                              • M Munchies_Matt

                                den2k88 wrote:

                                there are always pieces of information in a process which are data-centric

                                Often not with drivers. In fact many are pure process and have no data of their own. They have states, flags, plenty of that, but no data.

                                D Offline
                                D Offline
                                den2k88
                                wrote on last edited by
                                #34

                                Munchies_Matt wrote:

                                Often not with drivers.

                                More like never, I concur. Drivers, firmware and heavy computing procedures get no benefit and mostly troubles at all from an internal OO implementation. As consumers of OOP (object as parameters), or external implementation (i.e. the driver is encapsulated in an object) they might get some benefits though.

                                GCS d-- s-/++ a- C++++ U+++ P- L+@ E-- W++ N+ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X

                                M 1 Reply Last reply
                                0
                                • D den2k88

                                  Munchies_Matt wrote:

                                  Often not with drivers.

                                  More like never, I concur. Drivers, firmware and heavy computing procedures get no benefit and mostly troubles at all from an internal OO implementation. As consumers of OOP (object as parameters), or external implementation (i.e. the driver is encapsulated in an object) they might get some benefits though.

                                  GCS d-- s-/++ a- C++++ U+++ P- L+@ E-- W++ N+ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X

                                  M Offline
                                  M Offline
                                  Munchies_Matt
                                  wrote on last edited by
                                  #35

                                  Probably why MSFT dont authorise C++ in the kernel, it isnt worth it. OF course when I see classes with get/set functions I chuckle. Just what is the point of pretending it is OO? :)

                                  1 Reply Last reply
                                  0
                                  • M Munchies_Matt

                                    Member 7989122 wrote:

                                    the programmers were proud of it,

                                    This is a problem in any language, and exactly what I am getting at here.l C++ give bedroom nerd programmers who think complexity is good the chance to do this. Real engineers dont.

                                    Member 7989122 wrote:

                                    what is the big difference bewtween operator overloading and virtual functions

                                    Huge. An overridden function is subclass specialisation. An operator overload is supposed to *improve* the operator's functionality specifically for that class. In fact without overloading that operator might be dangerous. Take the classic 'class contains an allocated pointer' and not overriding the '=' operator. The class being copied to needs new memory allocating, and the contents copied to it. This is good. This is logical. Using [] to add a member to the end of an array is just stupid.

                                    K Offline
                                    K Offline
                                    kalberts
                                    wrote on last edited by
                                    #36

                                    Munchies_Matt wrote:

                                    This is a problem in any language, and exactly what I am getting at here.l C++ give bedroom nerd programmers who think complexity is good the chance to do this.

                                    Sure every programming language has facilities that may be abused. Some has more such "options" than others. Take pointer arithmetic: You can do that in C an C++, but not in C#. Adressing out of array bounds (deliberately or accidentally) you can do in C, but not in Pascal. Silent fall through in a switch statement you can do in C, but neither in Pascal (no fallthrough at all) or C# (explicit). Dividing 'B' by 2 to get an exclamation mark: Allowed in C, not in properly typed languages. Fortran had its 'facilities', such as common blocks and GOTOs. Actually, most languages do provide labels and GOTO, but I don't think I have programmed a single GOTO in my 35 years as a programmer, and I have hardly ever come across code that uses is. At least not after that 101 Elementary Programming as as freshman at the U, which was taught in Fortran (the next year they switched to Pascal). Other languages, too, can be abused. But languages do vary a lot in how much effort it takes to get to those misbehaviour features (I think you could do pointer arithmetic tricks in "unsafe" C#, and many Pascal compilers lets you turn off the array index checking). It also varies a lot what is commonly accepted programming style in textbook examples, widely distributed open source code etc. For C, you see things like (usually unsafe) pointer arithmetic, or pro forma arrays of length 0 because they will be arbitrarily indexed out of bounds etc. Fortran examples could have lots of labels and GOTOs, and so could Basic, but you would rarely if ever see a GOTO in a Pascal or C# textbook. You may be a "clever" C programmer able to "prove" that you can do the same nasty things in a more strictly typed language, a language lacking explicit pointers, etc. "So that other language is just as bad as C". No, it isn't, if you have to be an expert and do special tricks that noone does by accident. In C (/C++) you might do things by accident or delibrately, and a bystander will be unable to distinguish between them. You need not do anything to "allow" neither switch fallthrough, out-of-bounds indexing or pointer arithmetic. Many other languages are far more helpful, trying to guide you not to do silly things. C is a "you asked for it, you got it"-language.

                                    1 Reply Last reply
                                    0
                                    • M Munchies_Matt

                                      Quite, this is in the map object. Obscene is isnt it, that such an abortion as this is used so widely.

                                      L Offline
                                      L Offline
                                      Luschan
                                      wrote on last edited by
                                      #37

                                      I guess you mean "abomination". Anyways, this is how I also feel X|

                                      1 Reply Last reply
                                      0
                                      • M Munchies_Matt

                                        Member 7989122 wrote:

                                        the programmers were proud of it,

                                        This is a problem in any language, and exactly what I am getting at here.l C++ give bedroom nerd programmers who think complexity is good the chance to do this. Real engineers dont.

                                        Member 7989122 wrote:

                                        what is the big difference bewtween operator overloading and virtual functions

                                        Huge. An overridden function is subclass specialisation. An operator overload is supposed to *improve* the operator's functionality specifically for that class. In fact without overloading that operator might be dangerous. Take the classic 'class contains an allocated pointer' and not overriding the '=' operator. The class being copied to needs new memory allocating, and the contents copied to it. This is good. This is logical. Using [] to add a member to the end of an array is just stupid.

                                        K Offline
                                        K Offline
                                        kalberts
                                        wrote on last edited by
                                        #38

                                        Munchies_Matt wrote:

                                        what is the big difference bewtween operator overloading and virtual functions

                                        Huge

                                        Implementationwise: Yeah, probably, in most compilers. Not necessarily. On an abstract level, for the user: Not very much. Both mechanisms provide similarly identified operations to be interpreted differently for different types/classes. The intention is that the implementations for various types shall have similar semantics, but it doesn't have to be. In my "childhood engineering years" (i.e. after graduation) I was programming in a Pascal-inspired proprietary language which allowed a left argument as well as right arguments, and a single right argument didn't require parentheses. Furthermore, the identifier syntax for functions allowed a big selection of special characters and Functions could be overloaded. "+" was a perfectly fine name for a function that could take MyComplex left and right arguments, or a MyComplex left and (float: re, float: im) right arguments. Conceptually, predefined "+" functions for int+int, int+float, ... were just like user functions. (Obviously, the compiler compiled wellknown builtin functions like these quite differently from those that were actually user written.) I made a function library for all assignment functions (like C's =, ++, -- and so on) for struct types, that updated the reference count and triggered whenever an object was freed with more than one reference to it, or the reference count went to 0 in a non-free operation. This was for development/debugging only; for production work the library (with its noticable overhead) was omitted and the "simple" assignments took their place, as the default implmentation for the assignment functions. This language wasn't a fullblown OO language; it didn't have a 'virtual function' concept. Yet having worked with overloaded "AddToList(MyComplex)" and overloaded "MyComplex + MyComplex", using identical mechanisms for the two, certainly blurs the distinction between overloaded operators and overloaded functions. Adding virtual functions on top of that doesn't make a very large conceptual difference.

                                        1 Reply Last reply
                                        0
                                        • OriginalGriffO OriginalGriff

                                          COMMON allowed you to share variables between different blocks of code: much like a C++ global variable being accessible from different classes. But ... it wasn't type checked, so you could declare a float and then use COMMON to import it as a 7 dimensional array of BYTE values if you wanted. Because the array bounds checking worked on the data as declared in the COMMON statement with no actual reference back to the original variable, you could happily use it to access any location in your memory space. And because there was no physical separation between code and data segments (flat memory model in those days) your code was not in a "read only partition" as code is now. Provided you understood machine code you could revise your program while it was running ... :laugh:

                                          Sent from my Amstrad PC 1640 Bad command or file name. Bad, bad command! Sit! Stay! Staaaay... AntiTwitter: @DalekDave is now a follower!

                                          G Offline
                                          G Offline
                                          Gary Wheeler
                                          wrote on last edited by
                                          #39

                                          Oh, I'm more than old enough to know how it worked. I'm just appalled at the notion of doing it in FORTRAN. I've written my own self-modifying code a couple of times, although not in the last 25 years or so. I can see where .NET could let you write self-generating code, but that's a kettle of different piscus, as it were.

                                          Software Zen: delete this;

                                          OriginalGriffO 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups