5 ms·
C++ isn't the easiest language to work with, but what I find truly bizarre are all the internet people who apparently hate C++ while also praising C as wonderfu
by TillE 13y ago
C++ isn't the easiest language to work with, but what I find truly bizarre are all the internet people who apparently hate C++ while also praising C as wonderful and "elegant". I'm convinced that the vast majority of them have never written anything significant in C, which is a painful experience tolerated only by systems programmers who actually need something that's one step above a portable assembly language.
C++ only fails if you try to write it like C, and don't take advantage of all the lovely new tools it gives you. It's always been a more useful language for nontrivial projects, and C++11 elevates it so much further.
- pjmlp 13y agoYes, many fail to understand that most C++ warts are caused by its C compatibility and are actually C issues. Which incidentally also affect Objective-C for the same reasons.
- nitrogen 13y agoDear HN, Is it really necessary to start another language war thread? Sincerely, a happy C developer.
- pjmlp 13y agoI am not starting a another language war. Just stating the fact that when someone posts "C++ is horrible because of X", that X is either also available in "ANSI C", caused by compatibility with C semantics or compatibility with C toolchain.
- nitrogen 13y agoHow about this one: "C++ is horrible because of implicit copy constructors"? That one's not in C :-). The newest additions to C++ for functional programming and automatic typing are quite intriguing. Blaming everything wrong with C++ on C is as disingenuous as labeling everything about C++ as wrong because one thing about it is wrong.
- pjmlp 13y ago> How about this one: "C++ is horrible because of implicit copy constructors"? That one's not in C :-). I also mentioned compatibility with C semantics. "The Design and Evolution of C++" contains lots of such examples.
- nitrogen 13y agoC doesn't implicitly convert one struct into another. Why implicitly convert one class into another just because I created a constructor in one class that takes the other class as a parameter? The "explicit" keyword should have been "implicit", with the default behavior reversed.
- zenbowman 13y agoI agree. I think Stoustrup got many things right, particularly RAII. It's not a consistent language, but its a very practical one.
- GFK_of_xmaspast 13y agoI'm a 20 year C programmer finally making the transition to C++ and as far as I can tell the main advantages C has left are: * Faster compilation * Comprehensible error messages * No cout
- stormbrew 13y agoI have more issue with the poor performance of iostreams than with the interface, personally. Typesafe and type deducting string formatting is a pretty nice thing to have.
- nikbackm 13y agoMaybe because iostreams are synchronized with stdio by default? It's possible to disable that for a big speed boost. There's also the issue that iostreams might be implemented on top of stdio for simplicity. Hard to make it faster in that case!
- stormbrew 13y agoEven then, it's pretty much the only place in the stdlib that extensively uses virtual calls, via std::locale. It's very complicated implementation-wise (I was actually working on an implementation of it once and it's not fun at all) and hard to find places to optimize it. It's not that it's too heavy for a console app's output, really, but for things like converting numbers to strings and vice-versa (a-la boost::format) it is definitely a lot slower than atoi/sprintf.
- vardump 13y agoI use C++ daily at work. C++ code tends also to have a lot of allocations and data copying going on. I know you can get around those, but it seems like C++ programmers don't. C++ looks nicer at first sight, but when you want to make sure error handling is correct, there's practically little advantage compared to C. Sure, C++ does have STL, but programmers still seem to occasionally allocate function stack and return a pointer to it and manage to do buffer overflows. C has much simpler flow of execution. C++ exceptions mean there are eventually a lot of different possible code execution paths. In C, flow of execution is almost always simple and predictable. C++ invites style where logic is spread over many layers of abstraction. It's often hard to see the whole picture of what's going on because of that. Instead you have to check all those constructors, destructors, watch out for inheritance, etc. In C, most related logic tends to be in same source file. A lot of bugs I've seen in legacy code are related to these issues.