Thanks for watching, everyone. I'm always a little nervous when I spend 45 minutes talking to an empty room, because it's hard to tell whether I'm going too fast or too slow, too complicated or too simple. Your feedback really helps when targeting future episodes.
LeeCampbell> As a C# dev this helped me understand the syntax (:: << etc) more than anything.
I'm glad to hear that. My goal in all of these episodes is to give you a taste and a general overview of the topic, making it easier to understand other videos/articles/books.
LeeCampbell> Most of the rules seem quite similar to the C# rules which is nice.
"Wow, people in Britain speak a language that's really similar to America's!" :->
kayvan> 0) C/C++ run-time startup functions,lifecycle, ie: initialization, how C/C++ startup function calls your application's entry-point function
This is outside my area of expertise (as far as I'm concerned, magic invokes main()), but I bet Charles could ask our CRT maintainer, Mahmoud Saleh, to cover this.
kayvan> 1) Virtual functions and the Run time cost of virtual functions & dynamic binding. kayvan> 2) forward declaration. Forward declaration of template classes
Got it. I was definitely planning to cover virtual functions (in particular, my favorite NVI idiom), but I had forgotten how important the subject of declarations versus definitions is. I'll cover that at the first available opportunity.
kayvan> 3) difference between template <class T> MyClass [and] template <typename T> MyClass
There is none! :-> (Only template template parameters care about typename versus class - and that is not a repeated word typo.)
I personally prefer "typename", because "class" has confusing connotations (it does NOT restrict T to class types; int remains perfectly acceptable).
AceHack> I'm also curious about typedef
Cool. I'll see if I can cover this in an episode along with other smaller features. (Unfortunately I can't demonstrate C++11's alias-declarations with the "using" keyword.) There are nontrivial bits here, like typedeffing function pointers.
AceHack> and as much as possible about the Preprocessor if that's considered part of the core c++.
It is, although the preprocessor is really a primitive text-manipulating language that's applied before C++ itself is compiled.
Chris> What I love about C++ is its complexity and that some operations in the language are undefined.
Of course, C++ doesn't go out of its way to be complicated. Most of the complexity is there for a reason - usually to support tricky code, sometimes to support backwards compatibility (as obnoxious as it may be, C++'s compatibility with C remains a strength).
As for undefined behavior, that usually exists because something is difficult to detect, and leaving it undefined permits significant optimizations.
Ivan> I barely managed to watch this episode, but not because STL is bad but because I really dont care that much about language rules
Heh. Remember, I'm not really interested in the Core Language as an end in itself. It's just that because it underlies all programming, and as a library developer I deal with very tricky code for a living, having a thorough understanding of Core is invaluable. It lets me write code with a complete understanding of how it's going to behave (users can do lots of things with the Standard Library and we have to be prepared for the crazy stuff they're going to inflict on us). Understanding the Core Language also makes it a lot easier to understand compiler warnings and errors. That speeds up my development cycle, and having no fear allows me to use complicated constructs more extensively. (Some programmers, fearing template errors, avoid templates when they would be a superior solution that would allow them to write cleaner code.)
Ivan> 1. Regarding episode 2 dont forgett to mention pointer paradox.
I haven't heard of that - perhaps I know it by another name.
Ivan> 2. Do you know why there arent trie_(multi)set and trie_(multi)map in boost or std? To obscure?
The Boost Graph Library could probably be used to construct tries. Both Boost and the Standard are developed by volunteers, so they consist of things that someone has had the time and motivation to develop/specify.
(I got started with C++ by implementing suffix trees, which are a special case of tries.)
Ivan> 3. One of the cool lectures (using TMP) would be solving this problem (if possible) : http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Graham-Hutton-Functional-Programming-Fundamentals-Chapter-11-of-13 with TMP
Interesting - I will see if I can find some time to play around with it (which is how I did my Nurikabe episodes). http://www.cs.nott.ac.uk/~gmh/countdown.pdf formally specifies the problem.
Ivan> 5. Idioms are a cool topic imho. Like I said I dont care that much about lang rules, but I like learning idiomatic way of programming in language X.
I'll definitely cover the Non-Virtual Interface idiom.
dot_tom> I've been using this language for almost 18 years and Stephan clear up some of the name resolution stuff for me in this video.
Sweet!
Guest> I actually have one question when you std::cout something in c++ why don't you include just iostream and you include ostream too I think iosteam will provide the ostream functions and objects too.
This is actually an interesting story. In C++98/03, <iostream> provides cout but not endl, which lives in <ostream>. I followed those rules strictly. In C++11, <iostream> is now required to include (or behave as if it includes) <ostream>. I actually just learned this at BoostCon/C++Now! 2012, and one of my todos when I get back to Redmond is to check whether we've implemented this in VC11.