6 ms·
Announcing the C++ FAQ
- balls187 13y agoCommunities like Node, Python, RoR, and even iOS (obj-c) have benefited from a defacto centralized point of reference, and I think devs who come from those communities will find it easier to be more productive in C++ with something like this. I always referred to Marshall Cline's FAQ as my reference point, but pulling together Bjarne's and StackOverflows FAQ's is a great step.
- acc01 13y agoAn essential companion to the consolidated C++ FAQ is the indispensable C++ FQA. http://yosefk.com/c++fqa/ http://yosefk.com/c++fqa/
- userbinator 13y agoIt's also worth reading this: http://stackoverflow.com/questions/3171647/errors-in-c-fqa http://stackoverflow.com/questions/3171647/errors-in-c-fqa
- reality_czech 13y agoHaving a different opinion than yours is not an error.
- barrkel 13y agoNo, that answer isn't particularly worth reading - unless you were doubting your C++ faith and wanted it shored up without much critical thought.
- eps 13y agoThe only thing "essential" about FQA is that someone absolutely has to drop a link to it whenever there's "C++" and "FAQ" in the same sentence. It's known for being known. The actual content is utter junk - just try reading through it once.
- mikeash 13y agoIt's strident and biased (and makes no attempt to hide either) but IMO it's quite informative. I've learned a lot about C++ from it.
- plorkyeran 13y agoI thought I learned a lot about C++ from it when I first read it, but I have gradually come to realize that the things I learned were mostly a mix of incorrect and irrelevant.
- benched 13y agoIt's a highly suspect source at best. The original FAQ (lite) is worlds better in spirit and in content.
- barrkel 13y agoI read through it once - some years ago - and agreed with its spirit. Unfortunately, until they've been enlightened, C++ acolytes are unlikely to understand it.
- benched 13y agoFor those who don't know, the FQA, unlike the FAQ is well known to be extremely biased and exaggerated. It is not a neutral resource - it was expressly written as a takedown, with exaggeration used to great effect.
- Niten 13y agoC++ is an ugly, flawed language. Despite this, it can also genuinely be the best choice for certain applications, and so there is a need for a FAQ such as this one. But it's not "essential" that any such reference be accompanied by a recitation of the reasons the language sucks (some of them legitimate, even). The FAQ is for people using a tool to make things; the FQA seems primarily used to score points in discussions such as this one.* I think working programmers generally have more use for the former. * There is also a need for constructive criticism of language design choices, of course, but the FQA predominantly rejects C++'s design premises (such as static compile-time polymorphism and lack of a memory-managed runtime) rather than recognize their utility and suggest better ways to accomplish them (as Mozilla is trying to do with Rust).
- elnate 13y agoDid anyone else think of the XKCD comic on new standards? https://xkcd.com/927/ https://xkcd.com/927/
- rkuykendall-com 13y agoI immediately thought of this, but dismissed it after reading that 2 of the largest FAQs were being merged. This is made less important by the fact that neither of those FAQs are going offline, but at least it gives the impression that this will be replacing 2 and not just creating a third.
- snogglethorpe 13y agoWhat will happen to the other FAQs...? It seems like if they're pretty much entirely incorporated into the official FAQ, they could (and maybe should) be replaced by links to and/or mirrors of the official FAQ. [At least in the case of Marshall Cline's FAQ, I've always found it somewhat confusingly organized, although the actual content was pretty good once you managed to find what you were looking for. My (brief!) initial impression is that this official FAQ seems better organized, at least...]
- xymostech 13y agoThey say that the previous FAQs will be replaced by links: > Both Marshall and Bjarne will be updating their FAQs to either forward or link to the new FAQ on a per-FAQ level.
- AndrewBissell 13y agoI recently started working my way through the C++ Primer after years of avoiding C++ and its reputation for complexity. My first impression is that it has actually matured into quite a nice language which strikes a balance between simplicity and programmer power which just isn't all that bad, especially given its genesis. There are some annoyances for sure -- lots of mentions of "subtle" differences in how certain concepts work are already cropping up in introductory chapters. I'm sure there's some reason that "auto" discards top-level qualifiers while "decltype" does not, but trying to ingrain so many of those distinctions is a pain. I'm also glad to have learned both Java and C before trying C++. The former so that I know some OO mistakes to avoid (I would not want to discover the pain of over-enthusiastic use of generics while knee deep in compiler template errors), and the latter because learning manual memory management and the stack/heap distinction is enough of a cognitive load without layering all of C++'s extra features on top. It's also good to have a bit deeper understanding of what's really going on with the memory and pointers under the hood, before handing over control to automatic resource management and smart pointers and such.
- jpgvm 13y agoI too have started learning C++11 recently after having never really had success picking up the language in the past. Coming from C I found C++ to be really difficult when I tried to pick it up a few years ago. I have since learnt Python,Ruby and C# and now I am having alot more success. So I really do second your opinion that learning something like Java (in my case C#) really helps a ton. I also highly recommend checking out the books recommended here: http://isocpp.org/get-started http://isocpp.org/get-started I am currently reading C++ Primer. :)
- userbinator 13y agoC++ is mostly an extension of C (there are some subtle differences like changes in the type system), so I also recommend C before C++; understanding how classes and methods are implemented (which would be the natural way to do it in C anyway) gives you better knowledge of practical, pragmatic use of OOP. As you mention, the layering of C++ is another thing that can guide the approach to learning the language: begin with the simple concepts that C++ added, like classes with methods, and then move on to inheritance, virtual methods, overloading/overriding, operator overloading, exceptions, and then templates, making sure you understand the previous ones before proceeding to the next extension. It's a big language, with many features, not all of which you'll need to use for any one application.
- e12e 13y agoI found the link to Stroustrup's "Learning Standard C++ as a New Language" [edit: from 1998, which explains why I found it kind of familiar to my late 90s run-in with c++...] interesting[2,1]. But then I tried to find out what's the current state of the art for idiomatic, cross-platform text processing (in unicode, probably utf-8) -- and got a little sad. There's still no way to write a ten(ish) line c++ program that reads and writes text, that works both on the windows console, and under OS X/*bsd and Linux? (Lets go crazy, say you have to implement a minimal cat, tac (reverses stdin on stdout) -- and also corresponding echo and ohce (I made that up, something that takes string(s) as input, and outputs the characters reversed (ie: "ohce olé there" outputs "ereht élo"). [2][edit] The direct link to Strostrup's paper is: http://stroustrup.com/new_learning.pdf http://stroustrup.com/new_learning.pdf code: http://isocpp.org/wiki/faq/newbie#simple-program http://isocpp.org/wiki/faq/newbie#simple-program [1] The FAQ briefly touches on Unicode, but it doesn't seem very helpful (to me): http://isocpp.org/wiki/faq/cpp11-language-misc http://isocpp.org/wiki/faq/cpp11-language-misc (search page for unicode) Trying to look for a (simple, generally accepted) solution, I came across: http://www.utf8everywhere.org/ http://www.utf8everywhere.org/ (If I'm reading this right, it says assume std::string is utf8, but I'm not sure if there are std-lib funtions for doing stuff like getting the index of a glyph, and reversing strings by glyph? And will they work on windows?) http://stackoverflow.com/questions/2037765/what-is-the-optimal-multiplatform-way-of-dealing-with-unicode-strings-under-c http://stackoverflow.com/questions/2037765/what-is-the-optim... Which points to: http://utfcpp.sourceforge.net/ http://utfcpp.sourceforge.net/ which is the best I'm aware of so far. http://stackoverflow.com/questions/8513249/handling-utf-8-in-c http://stackoverflow.com/questions/8513249/handling-utf-8-in... http://stackoverflow.com/questions/402283/stdwstring-vs-stdstring http://stackoverflow.com/questions/402283/stdwstring-vs-stds... (Suggest using wstring on Windows and string on Linux -- for simple programs that would effectively mean write to versions, one for each platform ..)
- yati 13y agoThis. I am very happy with how C++ has evolved and how expressive it has become today, but decent Unicode support at least in the stdlib is something any programmer would(hopefully) look for in a modern language. Thanks for the interesting links, though.
- 13y ago
- shmerl 13y agoMarshall Cline’s C++ FAQ is really great. Good to see it will be merged into the new one. Other resources I use regularly are: * http://en.cppreference.com http://en.cppreference.com * http://www.cplusplus.com http://www.cplusplus.com
- brudgers 13y agoUntil now, there have been several different overlapping FAQs, including notably: Bjarne Stroustrup’s FAQ pages Marshall Cline’s popular C++ FAQs Online at least three different StackOverflow C++ FAQs in some form.... and many others What could be more apropos than multiple inheritance?
- pjmlp 13y agoGiven that all modern languages do support some form of MI, maybe it is time to stop bashing C++ about it.
- andrewflnr 13y agoMaybe, but how many other modern languages have the same diamond inheritance problem? Most modern languages put more limits on MI.
- pjmlp 13y agoAll of them have the same problem. It just shows up in different ways. In C++ case you have two main issues: - the decision to have or not virtual base classes, due to C++ design of only paying for what you use, the common solution to duplicate data members in OO languages is explicit in C++ - even if one restricts him/herself to use pure abstract classes without data members, as a way to implement interfaces, there is the problem of function members collisions. Some OO languages with inheritance of state usually get away with the data member duplication, either by doing what C++ compilers do with virtual base classes. The ones that adopt only some form interfaces/traits, have to deal with name clashes the same way as C++. All the existing solutions are kind of good enough, but not perfect: - Using of some form of linearisation algorithm every developer needs to be aware of, to understand which methods wins; - Members need to be renamed, thus changing the real interface meaning - Implementations are provided for each collided method, requiring either casts to specific interfaces or explicit calls for the right method - Provide just one implementation, with the caveat the semantics might not match all the interfaces that share the same method signature - Not allowing collisions, forcing the creation of an adapter interface So it is not well in the MI solutions outside C++. Each approach has plus and minus.
- omaranto 13y agoI enjoyed the wording of this question: "I’m from Missouri. Can you give me a simple reason why virtual functions (dynamic binding, dynamic polymorphism) and templates (static polymorphism) make a big difference?"