Bjarne Stroustrup's C++ Style and Technique FAQ

Modified December 17, 2011

These are questions about C++ Style and Technique that people ask me often.
If you have better questions or comments on the answers,
feel free to email me (bs@research.att.com).
Please remember that I can't spend all of my time improving my homepages.

For more general questions, see my
general FAQ.

For terminology and concepts, see my
C++ glossary.

Please note that these are just a collection of questions and answers. They are not
a substitute for a carefully selected sequence of examples and explanations
as you would find in a good textbook. Nor do they offer detailed and precise
specifications as you would find in a reference manual or the standard.
See
The Design and Evolution of C++ for questions
related to the design of C++.
See The C++ Programming Language for questions
about the use of C++ and its standard library.

Translations:

  • Chinese
    of some of this Q&A with annotations
  • another Chinese version.
  • Japanese
  • Ukrainian
  • Topics:
    • Getting started
    • Classes
    • Hierarchy
    • Templates and generic programming
    • Memory
    • Exceptions
    • Other language features
    • Trivia and style
  • Getting started:
    • How do I write this very simple program?
    • Can you recommend a coding standard?
    • How do I read a string from input?
    • How do I convert an integer to a string?
  • Classes:
    • How are C++ objects laid out in memory?
    • Why is "this" not a reference?
    • Why is the size of an empty class not zero?
    • How do I define an in-class constant?
    • Why isn't the destructor called at the end of scope?
    • Does "friend" violate encapsulation?
    • Why doesn't my constructor work right?
  • Class hierarchies:
    • Why do my compiles take so long?
    • Why do I have to put the data in my class declarations?
    • Why are member functions not virtual by default?
    • Why don't we have virtual constructors?
    • Why are destructors not virtual by default?
    • What is a pure virtual function?
    • Why doesn't C++ have a final keyword?
    • Can I call a virtual function from a constructor?
    • Can I stop people deriving from my class?
    • Why doesn't C++ have a universal class Object?
    • Do we really need multiple inheritance?
    • Why doesn't overloading work for derived classes?
    • Can I use "new" just as in Java?
  • Templates and generic programming:
    • Why can't I define constraints for my template parameters?
    • Why can't I assign a vector<Apple> to a vector<Fruit>?
    • Is "generics" what templates should have been?
    • why use sort() when we have "good old qsort()"?
    • What is a function object?
    • What is an auto_ptr and why isn't there an auto_array?
    • Why doesn't C++ provide heterogenous containers?
    • Why are the standard containers so slow?
  • Memory:
    • How do I deal with memory leaks?
    • Why doesn't C++ have an equivalent to realloc()?
    • What is the difference between new and malloc()?
    • Can I mix C-style and C++ style allocation and deallocation?
    • Why must I use a cast to convert from void*?
    • Is there a "placement delete"?
    • Why doesn't delete zero out its operand?
    • What's wrong with arrays?
  • Exceptions:
    • Why use exceptions?
    • How do I use exceptions?
    • Why can't I resume after catching an exception?
    • Why doesn't C++ provide a "finally" construct?
    • Can I throw an exception from a constructor? From a destructor?
    • What shouldn't I use exceptions for?
  • Other language features:
    • Can I write "void main()"?
    • Why can't I overload dot, ::, sizeof, etc.?
    • Can I define my own operators?
    • How do I call a C function from C++?
    • How do I call a C++ function from C?
    • Why does C++ have both pointers and references?
    • Should I use NULL or 0?
    • What's the value of i++ + i++?
    • Why are some things left undefined in C++?
    • What good is static_cast?
    • So, what's wrong with using macros?
  • Trivia and style:
    • How do you pronounce "cout"?
    • How do you pronounce "char"?
    • Is ``int* p;'' right or is ``int *p;'' right?
    • Which layout style is best for my code?
    • How do you name variables? Do you recommend "Hungarian"?
    • Should I use call-by-value or call-by-reference?
    • Should I put "const" before or after the type?
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。