FACTOID # 169: Train spotters should go to Australia - Australians have more railway per capita than anyone else on the globe.
 
 Home   Encyclopedia   Statistics   Countries A-Z   Flags   Maps   Education   Forum   FAQ   About 
 
 
 
WHAT'S NEW
RECENT ARTICLES
More Recent Articles »
 

SEARCH ALL

FACTS & STATISTICS    Advanced view

Search encyclopedia, statistics and forums:

 

 

(* = Graphable)

 

 


Encyclopedia > C with classes
C++
Paradigm: multi-paradigm: generic-programming language with a bias towards systems programming, object-oriented, procedural
Appeared in: 1985, last revised 2003
Designed by: Bjarne Stroustrup
Typing discipline: static, unsafe, nominative
Major implementations: GNU Compiler Collection, Microsoft Visual C++, Borland C++ Builder
Dialects: ANSI C++ 1998, ANSI C++ 2003
Influenced by: C, Simula, Ada 83, ALGOL 68, CLU, ML
Influenced: Ada 95, C#, Java, PHP, D

C++ (pronounced "see plus plus", IPA: [siː plʌs plʌs]) is a general-purpose, high-level programming language with low-level facilities. It is a statically typed free-form multi-paradigm language supporting procedural programming, data abstraction, object-oriented programming, generic programming and RTTI. Since the 1990s, C++ has been one of the most popular commercial programming languages. A programming paradigm is a paradigmatic style of programming (compare with a methodology, which is a paradigmatic style of doing software engineering). ... A multiparadigm programming language is a programming language that supports more than one programming paradigm. ... Generic programming is a style of computer programming where algorithms are written in an extended grammar and are made adaptable by specifying variable parts that are then somehow instantiated later by the compiler with respect to the base grammar. ... Object-oriented programming (OOP) is a programming paradigm that uses objects to design applications and computer programs. ... This does not cite its references or sources. ... Bjarne Stroustrup Bjarne Stroustrup (IPA: ) (born December 30, 1950 in Aarhus, Denmark) is a computer scientist and the College of Engineering Chair Professor of Computer Science at Texas A&M University. ... In computer science, a type system defines how a programming language classifies values and expressions into types, how it can manipulate those types and how they interact. ... In computer science, a type system defines how a programming language classifies values and expressions into types, how it can manipulate those types and how they interact. ... In computer science, a type system defines how a programming language classifies values and expressions into types, how it can manipulate those types and how they interact. ... A nominative type system is a major classes of type system, in which type compatibility and equivalence is determined by explicit declarations and/or the name of the types. ... Look up Implementation in Wiktionary, the free dictionary. ... The GNU Compiler Collection (usually shortened to GCC) is a set of programming language compilers produced by the GNU Project. ... This article or section does not cite its references or sources. ... C++ Builder, often abbreviated BCB, is a popular rapid application development (RAD) environment produced by Borland for writing programs in the C++ programming language. ... A dialect of a programming language is a (relatively small) variation or extension of the language that does not change its intrinsic nature. ... The American National Standards Institute or ANSI (pronounced an-see) is a nonprofit organization that oversees the development of standards for products, services, processes and systems in the United States. ... C is a general-purpose, procedural, imperative computer programming language developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system. ... Simula is a name for two programming languages, Simula I and Simula 67, developed in the 1960s at the Norwegian Computing Center in Oslo, by Ole-Johan Dahl and Kristen Nygaard. ... Ada is a structured, statically typed imperative computer programming language designed by a team led by Jean Ichbiah of CII Honeywell Bull under contract by the US Navy during 1977–1983. ... ALGOL 68 (short for ALGOrithmic Language 1968) is an imperative computer programming language that was conceived as a successor to the ALGOL 60 programming language, designed with the goal of a much wider scope of application and a more rigorously defined syntax and semantics. ... CLU is a programming language created at MIT by Barbara Liskov and her students between 1974 and 1975. ... ML is a general-purpose functional programming language developed by Robin Milner and others in the late 1970s at Edinburgh University, whose syntax is inspired by ISWIM. Historically, ML stands for metalanguage as it was conceived to develop proof tactics in the LCF theorem prover (the language of which ML... Ada is a structured, statically typed imperative computer programming language designed by a team led by Jean Ichbiah of CII Honeywell Bull under contract by the US Navy during 1977–1983. ... The title given to this article is incorrect due to technical limitations. ... Java is an object-oriented programming language developed by Sun Microsystems in the early 1990s. ... PHP (PHP: Hypertext Preprocessor) is a reflective programming language originally designed for producing dynamic Web pages. ... D is an object-oriented, imperative system programming language designed by Walter Bright of Digital Mars as a re-engineering of C/C++. He has done this by re-designing many C++ features, and borrowing ideas from other programming languages. ... For information on how to read IPA transcriptions of English words see here. ... A high-level programming language is a programming language that, in comparison to low-level programming languages, may be more abstract, easier to use, or more portable across platforms. ... A programming language is an artificial language that can be used to control the behavior of a machine, particularly a computer. ... High level and low level are terms used in classifying levels of description and goals in many fields where systems could be described from different perspectives. ... In computer science, a type system defines how a programming language classifies values and expressions into types, how it can manipulate those types and how they interact. ... In computer programming, a free-form language is a programming language in which the positioning of characters on the page in program text is not significant. ... A multiparadigm programming language is a programming language that supports more than one programming paradigm. ... This does not cite its references or sources. ... In computer science, abstraction refers to two related, but different concepts. ... Object-oriented programming (OOP) is a programming paradigm that uses objects to design applications and computer programs. ... Generic programming is a style of computer programming where algorithms are written in an extended grammar and are made adaptable by specifying variable parts that are then somehow instantiated later by the compiler with respect to the base grammar. ... This article or section should be merged with datatype or runtime. ...


Bjarne Stroustrup developed C++ (originally named "C with Classes") in 1983 at Bell Labs as an enhancement to the C programming language. Enhancements started with the addition of classes, followed by, among other features, virtual functions, operator overloading, multiple inheritance, templates, and exception handling. The C++ programming language standard was ratified in 1998 as ISO/IEC 14882:1998, the current version of which is the 2003 version, ISO/IEC 14882:2003. A new version of the standard (known informally as C++0x) is being developed. Bjarne Stroustrup Bjarne Stroustrup (IPA: ) (born December 30, 1950 in Aarhus, Denmark) is a computer scientist and the College of Engineering Chair Professor of Computer Science at Texas A&M University. ... Bell Laboratories (also known as Bell Labs and formerly known as AT&T Bell Laboratories and Bell Telephone Laboratories) was the main research and development arm of the United States Bell System. ... C is a general-purpose, procedural, imperative computer programming language developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system. ... In object-oriented programming, classes are used to group related variables and functions. ... This article or section should be merged with Virtual method In many object oriented programming languages such as C++, C#, VB.NET, a virtual function is a function that can be overridden with specialized implementations in subclasses. ... In computer programming, operator overloading (less commonly known as operator ad-hoc polymorphism) is a specific case of polymorphism in which some or all of operators like +, = or == have different implementations depending on the types of their arguments. ... Multiple inheritance refers to a feature of object-oriented programming languages in which a class can inherit behaviors and features from more than one superclass. ... In computer programming, templates are a feature of the C++ programming language that allow code to be written without consideration of the data type with which it will eventually be used. ... Exception handling is a programming language construct or computer hardware mechanism designed to handle the occurrence of some condition that changes the normal flow of execution. ... ISO/IEC International Standard 14882, Programming Languages — C++, is the official standard for the C++ programming language and library, defined by the JTC1/SC22/WG21 working group. ... C++0x, the new standard for the C++ programming language, will soon replace the current standard C++98. ...

Contents

History

Stroustrup began work on C with Classes in 1979. The idea of creating a new language originated from Stroustrup's experience in programming for his Ph.D. thesis. Stroustrup found that Simula had features that were very helpful for large software development, but the language was too slow for practical use, while BCPL was fast but too low-level and unsuitable for large software development. When Stroustrup started working in Bell Labs, he had the problem of analyzing the UNIX kernel with respect to distributed computing. Remembering his Ph.D. experience, Stroustrup set out to enhance the C language with Simula-like features. C was chosen because it is general-purpose, fast, and portable. Besides C and Simula, some other languages which inspired him were ALGOL 68, Ada, CLU and ML. At first, the class, derived class, strong type checking, inlining, and default argument features were added to C via Cfront. The first commercial release occurred in October 1985.[1] Simula is a name for two programming languages, Simula I and Simula 67, developed in the 1960s at the Norwegian Computing Center in Oslo, by Ole-Johan Dahl and Kristen Nygaard. ... BCPL (Basic Combined Programming Language) is a computer programming language that was designed by Martin Richards of the University of Cambridge in 1966; it was originally intended for use in writing compilers for other languages. ... Bell Laboratories (also known as Bell Labs and formerly known as AT&T Bell Laboratories and Bell Telephone Laboratories) was the main research and development arm of the United States Bell System. ... Filiation of Unix and Unix-like systems Unix (officially trademarked as UNIX®) is a computer operating system originally developed in the 1960s and 1970s by a group of AT&T employees at Bell Labs including Ken Thompson, Dennis Ritchie and Douglas McIlroy. ... A kernel connects the application software to the hardware of a computer. ... Distributed computing is a method of computer processing in which different parts of a program run simultaneously on two or more computers that are communicating with each other over a network. ... C is a general-purpose, procedural, imperative computer programming language developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system. ... Simula is a name for two programming languages, Simula I and Simula 67, developed in the 1960s at the Norwegian Computing Center in Oslo, by Ole-Johan Dahl and Kristen Nygaard. ... ALGOL 68 (short for ALGOrithmic Language 1968) is an imperative computer programming language that was conceived as a successor to the ALGOL 60 programming language, designed with the goal of a much wider scope of application and a more rigorously defined syntax and semantics. ... Ada is a structured, statically typed imperative computer programming language designed by a team led by Jean Ichbiah of CII Honeywell Bull during 1977–1983. ... CLU is a programming language created at MIT by Barbara Liskov and her students between 1974 and 1975. ... ML is a general-purpose functional programming language developed by Robin Milner and others in the late 1970s at the University of Edinburgh, whose syntax is inspired by ISWIM. Historically, ML stands for metalanguage as it was conceived to develop proof tactics in the LCF theorem prover (the language of... Cfront was the original compiler for C++ (then known as C with Classes) from around 1983, which converted C++ to C; developed by Bjarne Stroustrup. ...


In 1983, the name of the language was changed from C with Classes to C++. New features were added including virtual functions, function name and operator overloading, references, constants, user-controlled free-store memory control, improved type checking, and a new single-line comment style with two forward slashes (//). In 1985, the first edition of The C++ Programming Language was released, providing an important reference to the language, as there was not yet an official standard. In 1989, Release 2.0 of C++ was released. New features included multiple inheritance, abstract classes, static member functions, const member functions, and protected members. In 1990, The Annotated C++ Reference Manual was published. This work became the basis for the future standard. Late addition of features included templates, exceptions, namespaces, new casts, and a Boolean type. In object-oriented programming (OOP), a virtual function or virtual method is a function whose behavior, by virtue of being declared virtual, is determined by the definition of a function with the same signature furthest in the inheritance lineage of the instantiated object on which it is called. ... In computer science, const-correctness is the form of program correctness that deals with the proper declaration of objects as mutable or immutable. ... In computer programming, templates are a feature of the C++ programming language that allow code to be written without consideration of the data type with which it will eventually be used. ... Exception handling is a programming language mechanism designed to handle runtime errors or other problems (exceptions) inside a computer program. ... A namespace is a context in which a group of one or more identifiers might exist. ... This article needs cleanup. ... In computer science the boolean datatype, sometimes called the logical datatype, is a primitive datatype having two values: one and zero (sometimes called true and false). ...


As the C++ language evolved, a standard library also evolved with it. The first addition to the C++ standard library was the stream I/O library which provided facilities to replace the traditional C functions such as printf and scanf. Later, among the most significant additions to the standard library, was the Standard Template Library. Several programming languages implement a printf function, to output a formatted string. ... scanf is a function that reads data with specified format from a given string stream source, originated from C programming language, and is present in many other programming languages. ... The Standard Template Library (STL) is a software library included in the C++ Standard Library. ...


After years of work, a joint ANSI-ISO committee standardized C++ in 1998 (ISO/IEC 14882:1998). For some years after the official release of the standard in 1998, the committee processed defect reports, and published a corrected version of the C++ standard in 2003. In 2005, a technical report, called the "Library Technical Report 1" (often known as TR1 for short) was released. While not an official part of the standard, it gives a number of extensions to the standard library which are expected to be included in the next version of C++. Support for TR1 is growing in almost all currently maintained C++ compilers. The American National Standards Institute or ANSI (pronounced an-see) is a nonprofit organization that oversees the development of standards for products, services, processes and systems in the United States. ... The International Organization for Standardization (ISO) is an international standard-setting body composed of representatives from national standards bodies. ... ISO/IEC International Standard 14882, Programming Languages — C++, is the official standard for the C++ programming language and library, defined by the JTC1/SC22/WG21 working group. ... Technical Report 1 (TR1) is a draft document specifying additions to the C++ Standard Library such as regular expressions, smart pointers, hash tables, and random number generators. ...


While the C++ language is royalty-free, the standard document itself is not freely available.


The name "C++"

This name is credited to Rick Mascitti (mid-1983) and was first used in December 1983. Earlier, during the research period, the developing language had been referred to as "new C", then "C with Classes". In computer science C++ is still referred to as a superstructure of C. The final name stems from C's "++" operator (which increments the value of a variable) and a common naming convention of using "+" to indicate an enhanced computer program. According to Stroustrup: "the name signifies the evolutionary nature of the changes from C". C+ was the name of an earlier, unrelated programming language. A prominent researcher that is credited with changing the name of the programming language C with Classes to C++ ... Research is often described as an active, diligent, and systematic process of inquiry aimed at discovering, interpreting, and revising facts. ... C is a general-purpose, procedural, imperative computer programming language developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system. ... In object-oriented programming, classes are used to group related variables and functions. ... Computer science, or computing science, is the study of the theoretical foundations of information and computation and their implementation and application in computer systems. ... // Sociological concept In social sciences, superstructure is the set of socio-psychological feedback loops that maintain a coherent and meaningful structure in a given society, or part thereof. ... C is a general-purpose, procedural, imperative computer programming language developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system. ... In mathematics, an operator is a function that performs some sort of operation on a number, variable, or function. ... It has been suggested that value (programming) be merged into this article or section. ... In computer science and mathematics, a variable (IPA pronunciation: ) (sometimes called a pronumeral) is a symbolic representation denoting a quantity or expression. ... A naming convention is an attempt to systematize names in a field so they unambiguously convey similar information in a similar manner. ... This article is about evolution in biology. ... ABCL/c+ is an object-oriented concurrent programming language, a variation of ABCL/1 based on C instead of LISP. See also ABCL/1 ABCL/R ABCL/R2 References An Implementation of An Operating System Kernel using Concurrent Object Oriented Language ABCL/c+, N. Doi et al in ECOOP 88...


Stroustrup addressed the origin of the name in the preface of later editions of his book, The C++ Programming Language, adding that "C++" might be inferred from the appendix of George Orwell's Nineteen Eighty-Four. Of the three segments of the fictional language Newspeak, the "C vocabulary" is the one dedicated to technical terms and jargon. "Doubleplus" is the superlative modifier for Newspeak adjectives. Thus, "C++" might hold the meaning "most extremely technical or jargonous" in Newspeak. A preface (Med. ... The C++ Programming Language is a book by Bjarne Stroustrup about the computer programming language C++. See also The Design and Evolution of C++ External links Book homepage This science-book-related article is a stub. ... Eric Arthur Blair (25 June 1903[1][2] – 21 January 1950), better known by the pen name George Orwell, was a British author and journalist. ... Nineteen Eighty-Four (commonly written as 1984) is a dystopian novel by the English writer George Orwell, published in 1949. ... Newspeak is a fictional language in George Orwells novel Nineteen Eighty-Four. ... To meet Wikipedias quality standards, this article or section may require cleanup. ... For the noun case, see superlative case. ...


When Rick Mascitti was questioned informally in 1992 about the naming, he indicated that it was given in a tongue-in-cheek spirit. He never thought that it would become the formal name of the language. A prominent researcher that is credited with changing the name of the programming language C with Classes to C++ ... Sarcasm is the making of remarks intended to mock the person referred to (who is normally the person addressed), a situation or thing. ...


A common joke of the name is that in C++ when you postfix ++ the addition happens only after the operation (hence, it should be ++C and not C++).


Future development

C++ continues to evolve to meet future requirements. One group in particular, Boost.org, works to make the most of C++ in its current form and advises the C++ standards committee as to which features work well and which need improving. Current work indicates that C++ will capitalize on its multi-paradigm nature more and more. The work at Boost, for example, is greatly expanding C++'s functional and metaprogramming capabilities. A new version of the C++ standard is currently being worked on, entitled C++0x (denoting the fact it is expected to be released before 2010) which will include a number of new features. The Boost C++ libraries are a collection of libraries that extend the functionality of C++. The libraries are licensed under the Boost Software License, designed to allow Boost to be used with a variety of projects. ... Metaprogramming is the writing of programs that write or manipulate other programs (or themselves) as their data or that do part of the work that is otherwise done at runtime during compile time. ... C++0x, the new standard for the C++ programming language, will soon replace the current standard C++98. ...


Philosophy

In The Design and Evolution of C++ (1994), Bjarne Stroustrup describes some rules that he uses for the design of C++. Knowing the rules helps to understand why C++ is the way it is. The following is a summary of the rules. Much more detail can be found in The Design and Evolution of C++. The Design and Evolution of C++ is a book by Bjarne Stroustrup about the birth of the computer programming language C++. See also The C++ Programming Language External links Book homepage This science-book-related article is a stub. ...

  • C++ is designed to be a statically typed, general-purpose language that is as efficient and portable as C
  • C++ is designed to directly and comprehensively support multiple programming styles (procedural programming, data abstraction, object-oriented programming, and generic programming)
  • C++ is designed to give the programmer choice, even if this makes it possible for the programmer to choose incorrectly
  • C++ is designed to be as compatible with C as possible, therefore providing a smooth transition from C
  • C++ avoids features that are platform specific or not general purpose
  • C++ does not incur overhead for features that are not used
  • C++ is designed to function without a sophisticated programming environment

Stanley B. Lippman describes various models in his in-depth book "Inside the C++ Object Model" (1996) for how compilers may convert C++ program statements into an in-memory layout. Compiler vendors are free to implement the standard in their own manner. Lippman worked on implementing and maintaining Cfront, the original C++ implementation at Bell Labs. In computer science, a datatype (often simply type) is a name or label for a set of values and some operations which can be performed on that set of values. ... This does not cite its references or sources. ... In computer science, abstraction refers to two related, but different concepts. ... Object-oriented programming (OOP) is a programming paradigm that uses objects to design applications and computer programs. ... Generic programming is a style of computer programming where algorithms are written in an extended grammar and are made adaptable by specifying variable parts that are then somehow instantiated later by the compiler with respect to the base grammar. ... Cfront was the original compiler for C++ (then known as C with Classes) from around 1983, which converted C++ to C; developed by Bjarne Stroustrup. ...


Standard library

The 1998 C++ standard consists of two parts: the core language and the C++ standard library; the latter includes most of the Standard Template Library and a slightly modified version of the C standard library. Many C++ libraries exist which are not part of the standard, and, using external linkage, libraries can even be written in C. Standardization, in the context related to technologies and industries, is the process of establishing a technical standard among competing entities in a market, where this will bring benefits without hurting competition. ... In computer science, a core language is a pure programming language, generally organized into statement blocks; the core language is often developed into libraries, which are then used during programming. ... In C++, the Standard Library is a collection of classes and functions, which are written in the core language. ... The Standard Template Library (STL) is a software library included in the C++ Standard Library. ... C is a general-purpose, procedural, imperative computer programming language developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system. ...


The C++ standard library incorporates the C standard library with some small modifications to make it work better with the C++ language. Another large part of the C++ library is based on the Standard Template Library (STL). This provides such useful tools as containers (for example vectors and lists), iterators (generalized pointers) to provide these containers with array-like access and algorithms to perform operations such as searching and sorting. Furthermore (multi)maps (associative arrays) and (multi)sets are provided, all of which export compatible interfaces. Therefore it is possible, using templates, to write generic algorithms that work with any container or on any sequence defined by iterators. As in C, the features of the library are accessed by using the #include directive to include a standard header. C++ provides sixty-nine standard headers, of which nineteen are deprecated. In C++, the Standard Library is a collection of classes and functions, which are written in the core language. ... The Standard Template Library (STL) is a software library included in the C++ Standard Library. ... A container is a type of data structure. ... This article or section does not cite its references or sources. ... In computer science, a linked list is one of the fundamental data structures used in computer programming. ... In computer science, an iterator is an object which allows a programmer to traverse through all the elements of a collection, regardless of its specific implementation. ... It has been suggested that Software pointer be merged into this article or section. ... In mathematics, computing, linguistics, and related disciplines, an algorithm is a procedure (a finite set of well-defined instructions) for accomplishing some task which, given an initial state, will terminate in a defined end-state. ... An associative array (also map, hash, dictionary, finite map, lookup table, and in query-processing an index or index file) is an abstract data type composed of a collection of keys and a collection of values, where each key is associated with one value. ... In geographic information systems, a feature comprises an item of feature data. ... A modern-style library in Chambéry A library is a collection of information resources and services, organized for use, and maintained by a public body, institution, or private individual. ... A directive is an instruction to a programming language compiler about how to compile a program. ... A standard header, in C, Objective-C and C++ programming, is a header file that contains common definitions and data structures that all programs may use as required. ...


Using the standard library--for example, using std::vector or std::string instead of a C-style array--can help lead to safer and more scalable software.


The STL was originally a third-party library from HP and later SGI, before its incorporation into the C++ standard. The standard does not refer to it as "STL", as it is merely a part of the standard library, but many people still use that term to distinguish it from the rest of the library (input/output streams, internationalization, diagnostics, the C library subset, etc.). The Standard Template Library (STL) is a software library included in the C++ Standard Library. ... The Hewlett-Packard Company (NYSE: HPQ), commonly known as HP, is a very large, global company headquartered in Palo Alto, California, United States. ... Silicon Graphics, Inc. ...


Most C++ compilers provide an implementation of the C++ standard library, including the STL. Compiler-independent implementations of the STL, such as STLPort, also exist. Other projects also produce various custom implementations of the C++ standard library and the STL with various design goals.


Features introduced in C++

Compared to the C language, C++ introduced extra features, including declarations as statements, function-like casts, new/delete, bool, reference types, inline functions, default arguments, function overloading, namespaces, classes (including all class-related features such as inheritance, member functions, virtual functions, abstract classes, and constructors), operator overloading, templates, the :: operator, exception handling, and runtime type identification. In computer science, a declaration specifies a variables dimensions, identifier, type, and other aspects. ... In the C and C++ programming languages, it is possible to dynamically allocate memory on the heap (sometimes called the free store) via the operator new. ... In the C++ programming language, the delete operator returns memory alloctated by new back to the heap. ... In the C++ programming language, a reference is a simple reference datatype that is less powerful but safer than the pointer type inherited from C, which is a reference in the general sense but not in the sense used by C++. // Syntax and terminology The declaration of the form <Type... A namespace is a context in which a group of one or more identifiers might exist. ... In computer programming, templates are a feature of the C++ programming language that allow code to be written without consideration of the data type with which it will eventually be used. ... In computer science, a type system defines how a programming language classifies values and expressions into types, how it can manipulate those types and how they interact. ...


Contrary to popular belief, C++ did not introduce the const keyword first. Const was formally added to C shortly before it was adopted by C++. In computer science, const-correctness is the form of program correctness that deals with the proper declaration of objects as mutable or immutable. ...


C++ also performs more type checking than C in several cases (see "Incompatibility with C" below).


Comments starting with two slashes ("//") were originally part of C's predecessor, BCPL, and were reintroduced in C++. C is a general-purpose, procedural, imperative computer programming language developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system. ... BCPL (Basic Combined Programming Language) is a computer programming language that was designed by Martin Richards of the University of Cambridge in 1966; it was originally intended for use in writing compilers for other languages. ...


Several features of C++ were later adopted by C, including declarations in for loops, C++-style comments (using the // symbol), and inline, though the C99 definition of the inline keyword is not compatible with its C++ definition. However, C99 also introduced features that do not exist in C++, such as variadic macros and better handling of arrays as parameters; some C++ compilers may implement some of these features as extensions, but others are incompatible with existing C++ features. C is a general-purpose, procedural, imperative computer programming language developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system. ... A variadic macro is a feature of the C Preprocessor whereby a macro may be declared to accept a varying number of arguments. ...


A very common source of confusion is a subtle terminology issue: because of its derivation from C, in C++ the term object means memory area, just like in C, and not class instance, which is what it means in most other object oriented languages. For example, in both C and C++, the statement int i; defines an object of type int, that is the memory area where the value of the variable i will be stored on assignment. In computer science, object-oriented programming, OOP for short, is a computer programming paradigm. ...


Incompatibility with C

For more details on this topic, see Compatibility of C and C++.

C++ is often considered to be a superset of C, but this is not strictly true. Most C code can easily be made to compile correctly in C++, but there are a few differences that cause some valid C code to be invalid in C++, or to behave differently in C++. The C and C++ programming languages are closely related, as C++ grew out of C and is many ways a superset of the latter. ...


Perhaps the most commonly encountered difference is that C allows implicit conversion from void* to other pointer types, but C++ does not. So, the following is valid C code:

 int *i = malloc(sizeof(int) * 5); /* Implicit conversion from void* to int* */ 

but to make it work in both C and C++ one would need to use an explicit cast:

 int *i = (int *) malloc(sizeof(int) * 5); 

Another common portability issue is that C++ defines many new keywords, such as new and class, that may be used as identifiers (e.g. variable names) in a C program.


Some incompatibilities have been removed by the latest (C99) C standard, which now supports C++ features such as // comments and mixed declarations and code. However, C99 introduced a number of new features that conflict with C++ (such as variable-length arrays, native complex-number types, and compound literals), so the languages may be diverging more than they are converging.


In order to intermix C and C++ code, any C code which is to be called from/used in C++ must be put in extern "C" { /* C code */ }.


It should be noted that for C++-only code, the use of static_cast is preferred over the C-style casting semantics: It has been suggested that this article or section be merged into type conversion. ...

 int *i = static_cast<int*>(malloc(sizeof(int) * 5)); 

Sample code

Minimal program

This is an example of a program which does nothing. It begins executing and immediately terminates. It consists of one thing: a main() function.The function main() is the designated start of a C++ program. In more complex C++ programs, code can be executed before main begins, for example the constructors of all global variables are run first. There can be only one main() function in a program. In computer science, a subroutine (function, procedure, or subprogram) is a sequence of code which performs a specific task, as part of a larger program, and is grouped as one, or more, statement blocks; such code is sometimes collected into software libraries. ... A computer program is a collection of instructions that describe a task, or set of tasks, to be carried out by a computer. ... In computer programming, a global variable is a variable that does not belong to any subroutine in particular and can therefore can be accessed from any context in a program. ...

Notes on compiler issues
Even though the latest C++ standard does not require a return 0; in main, some older compilers such as Microsoft Visual C++ 6 give warnings or errors for a main without a return statement and may not generate correct object code.
 int main() { } 

The C++ Standard requires that main() returns type int. A program which uses any other return type for main() is technically not Standard C++, although many compilers do not enforce this strictly. The Standard also does not say what the return value of main() actually means. Traditionally, it is interpreted as the return value of the program itself. The Standard guarantees that returning zero or the macro EXIT_SUCCESS from main() indicates successful termination. Unsuccessful termination can be indicated by returning the macro EXIT_FAILURE. All other values are implementation-defined. This allows each operating system to define these values differently. Microsoft Visual C++ 2005, Professional Edition Visual C++ 6. ... Return types are what results from calling a method or function in high-level programming languages, such as Java, C++, C, Prolog and many others. ...


If, as in this example, execution reaches the end of main() without encountering a return statement, zero is returned implicitly. Only the main function has this implicit return statement. In any other non-void function, reaching the end of the function without meeting a return statement is undefined behavior. In computer science, undefined behavior is a feature of some programming languages — most famously C. In these languages, to simplify the specification and allow some flexibility in implementation, the specification leaves the results of certain operations specifically undefined. ...


Hello world program

This is an example of a Hello world program, which uses the C++ standard library (not the Standard Template Library ("STL")) cout facility to display a message, then terminates. A hello world program is a software program that prints out Hello world! on a display device. ... In C++, the Standard Library is a collection of classes and functions, which are written in the core language. ... The Standard Template Library (STL) is a software library included in the C++ Standard Library. ... Message in its most general meaning is an object of communication. ...

 #include <iostream> #include <ostream> int main() { std::cout << "Hello, world!" << std::endl; return 0; } 

iostream is a header file which is used for input/output in the C++ programming language. ...

Language features

Operators

This is a list of operators in the C++ and C programming languages. ...

Preprocessor

C++ is principally compiled in three phases: preprocessing, translation to object code, and linking (the two last phases are what is generally thought of as the "compilation" proper). In the first phase, preprocessing, preprocessor directives apply lexical transformations to the source code, which is then fed to the next compilation stage.


Preprocessor directives and macros

Pre-processing directives work by simple substitution of tokenized character sequences for other tokenized character sequences, according to user-defined rules. They typically perform macro substitution, inclusion of other files (by opposition to higher-order features such as inclusion of modules/packages/units/components), conditional compilation and/or conditional inclusion. For instance: A macro in computer science is an abstraction, whereby a certain textual pattern is replaced according to a defined set of rules. ...

 #define PI 3.1415926535897932384626433832795028841971693993751 

Every time PI appears in the source code it will be replaced with 3.1415926535897932384626433832795028841971693993751. Another common example is

 #include <iostream> 

which includes (imports) all symbols from the standard library header file iostream. In addition to the most common directives mentioned above, there are several additional preprocessor directives that control the flow of compilation, conditionally include or exclude code blocks, and control various other aspects of compilation.

Also see preprocessor and C preprocessor

In computer science, a preprocessor is a program that processes its input data to produce output that is used as input to another program. ... The C preprocessor (cpp) is the preprocessor for the C programming language. ...

Templates

Templates are different from macros: while both of these compile-time language features can be used to produce conditional compilation, templates are not restricted to lexical substitution. Templates have an awareness of the semantics and type system of their companion language as well as all compile-time type definitions and can perform high-level operations including programmatic flow control based on evaluation of strictly type-checked parameters. Macros are capable of conditional control over compilation based on predetermined criteria but cannot instantiate new types, recurse or perform type evaluation and in effect are limited to pre-compilation text-substitution and text-inclusion/exclusion. In other words, macros can control compilation flow based on pre-defined symbols but cannot, unlike templates, independently instantiate new symbols. Templates are a tool for static polymorphism (see below) and generic programming. For example, a template replacing the common, but dangerous, macro #define max(x,y) ((x)>(y)?(x):(y)): In general, polymorphism describes multiple possible states for a single property (it is said to be polymorphic). ... Generic programming is a style of computer programming where algorithms are written in an extended grammar and are made adaptable by specifying variable parts that are then somehow instantiated later by the compiler with respect to the base grammar. ...

 template <typename T> T max(T x, T y) { return x > y ? x : y ; } 

This can be found in the algorithm header as std::max().


In addition, templates are a compile time mechanism in C++ which is Turing-complete, meaning that any computation expressible by a computer program can be computed, in some form, by a template metaprogram prior to runtime. In computability theory a programming language or any other logical system is called Turing-complete if it has a computational power equivalent to a universal Turing machine. ... Template metaprogramming is a programming technique in which templates are used by a compiler to generate temporary source code, which is merged by the compiler with the rest of the source code and then compiled. ...

See also generic programming and template metaprogramming

Generic programming is a style of computer programming where algorithms are written in an extended grammar and are made adaptable by specifying variable parts that are then somehow instantiated later by the compiler with respect to the base grammar. ... Template metaprogramming is a programming technique in which templates are used by a compiler to generate temporary source code, which is merged by the compiler with the rest of the source code and then compiled. ...

Objects

C++ introduces some object-oriented (OO) features to C. It offers classes, which provide the four features commonly present in OO (and some non-OO) languages: abstraction, encapsulation, inheritance and polymorphism. Objects are set by classes, which are basically like a set of attributes already defined, and can be created at any time. Object-oriented programming (OOP) is a computer programming paradigm in which a software system is modeled as a set of objects that interact with each other. ... In object-oriented programming, classes are used to group related variables and functions. ... In computer science, abstraction is a mechanism and practice to reduce and factor out details so that one can focus on a few concepts at a time. ... In computer science, the principle of information hiding is the hiding of design decisions in a computer program that are most likely to change, thus protecting other parts of the program from change if the design decision is changed. ... In object-oriented programming of computer science, an inheritance is a way to form new classes (instances of which will be objects) using pre-defined objects or classes where new ones simply take over old ones implementations and characteristics. ... In computer science, polymorphism means allowing a single definition to be used with different types of data (specifically, different classes of objects). ...


Encapsulation

Encapsulation is the grouping together of data and functionality. C++ implements encapsulation by allowing all members of a class to be declared as either public, private, or protected. A public member of the class will be accessible to any function. A private member will only be accessible to functions that are members of that class and to functions and classes explicitly granted access permission by the class ("friends"). A protected member will be accessible to members of classes that inherit from the class in addition to the class itself and any friends. In computer science, the principle of information hiding is the hiding of design decisions in a computer program that are most likely to change, thus protecting other parts of the program from change if the design decision is changed. ...


The OO principle is that all and only the functions that can access the internal representation of a type should be encapsulated within the type definition. C++ supports this (via member functions and friend functions), but does not enforce it: the programmer can declare parts or all of the representation of a type to be public, and is also allowed to make public entities that are not part of the representation of the type. Because of this, C++ supports not just OO programming but other weaker decomposition paradigms, like modular programming. Modularity is a concept that has applications in the contexts of computer science, particularly programming, as well as cognitive science in investigating the structure of mind. ...


It is generally considered good practice to make all data private or protected, and to make public only those functions that are part of a minimal interface for users of the class, that hides implementation details. In general, data consist of propositions that reflect reality. ...


Inheritance

Inheritance allows one data type to acquire properties of other data types. Inheritance from a base class may be declared as public, protected, or private. This access specifier determines whether unrelated and derived classes can access the inherited public and protected members of the base class. Only public inheritance corresponds to what is usually meant by "inheritance". The other two forms are much less frequently used. If the access specifier is omitted, inheritance is assumed to be private for a class base and public for a struct base. Base classes may be declared as virtual; this is called virtual inheritance. Virtual inheritance ensures that only one instance of a base class exists in the inheritance graph, avoiding some of the ambiguity problems of multiple inheritance. In object-oriented programming, inheritance is a way to form new classes (instances of which are called objects) using classes that have already been defined. ... Virtual inheritance is a form of inheritance in object-oriented programming languages. ... Multiple inheritance refers to a feature of object-oriented programming languages in which a class can inherit behaviors and features from more than one superclass. ...


Multiple inheritance is a C++ feature sometimes considered controversial. Multiple inheritance allows a class to be derived from more than one base class; this can result in a complicated graph of inheritance relationships. For example, a "Flying Cat" class can inherit from both "Cat" and "Flying Mammal". Some other languages, such as C# or Java, accomplish something similar (although more limited) by allowing inheritance of multiple interfaces while restricting the number of base classes to one (interfaces, unlike classes, provide only declarations of member functions, no implementation or member data). Multiple inheritance refers to a feature of object-oriented programming languages in which a class can inherit behaviors and features from more than one superclass. ... The title given to this article is incorrect due to technical limitations. ... Java is an object-oriented programming language developed by Sun Microsystems in the early 1990s. ... An interface defines the communication boundary between two entities, such as a piece of software, a hardware device, or a user. ...


Polymorphism

See also: Polymorphism in object-oriented programming

Polymorphism (computer science) enables one common interface for many implementations, and for objects to act differently under different circumstances. C++ supports several kinds of static (compile-time) and dynamic (run-time) polymorphism. Compile-time polymorphism does not allow for certain run-time decisions, while run-time polymorphism typically incurs a performance penalty. In simple terms, polymorphism lets you treat derived class members just like their parent classs members. ... In computer science, polymorphism means allowing a single definition to be used with different types of data (specifically, different classes of objects). ... In computer science, compile time, as opposed to runtime, is the time when a compiler compiles code written in a programming language into an executable form. ... In computer science, runtime describes the operation of a computer program, the duration of its execution, from beginning to termination (compare compile time). ... In computer science, polymorphism means allowing a single definition to be used with different types of data (specifically, different classes of objects). ...


Static polymorphism

Function overloading

Function overloading allows programs to declare multiple functions with the same name. The functions are distinguished by the number and/or types of their formal parameters. Thus, the same function name can refer to different functions depending on the context in which it is used. The type returned by the function is not used to distinguish overloaded functions. In computer science, polymorphism is the idea of allowing the same code to be used with different types, resulting in more general and abstract implementations. ... A parameter is a variable which can be accepted by a subroutine. ...

Operator overloading

Similarly, operator overloading allows programs to define certain operators (such as +, !=, <, or &) to result in a function call that depends on the types of the operands they are used on. In computer programming, operator overloading (less commonly known as operator ad-hoc polymorphism) is a specific case of polymorphism in which some or all of operators like +, = or == have different implementations depending on the types of their arguments. ...

Class and function templates

Templates in C++ provide a sophisticated mechanism for writing generic, polymorphic code. In particular, through the Curiously Recurring Template Pattern it's possible to implement a form of static polymorphism that closely mimics the syntax for overriding virtual methods (a dynamic polymorphism technique described below). Since C++ templates are type-aware and Turing-complete they can also be used to let the compiler resolve recursive conditionals and generate substantial programs through template metaprogramming. Generic programming is a style of computer programming where algorithms are written in an extended grammar and are made adaptable by specifying variable parts that are then somehow instantiated later by the compiler with respect to the base grammar. ... In software engineering, the curiously recurring template pattern (CRTP), is a software design pattern where a base class template is instantiated with a derived class type as its template parameter. ... In computability theory a programming language or any other logical system is called Turing-complete if it has a computational power equivalent to a universal Turing machine. ... Template metaprogramming is a programming technique in which templates are used by a compiler to generate temporary source code, which is merged by the compiler with the rest of the source code and then compiled. ...


Dynamic polymorphism

Polymorphism through inheritance

Variable pointers (and references) of a base class type in C++ can refer to objects of any derived classes of that type in addition to objects exactly matching the variable type. This allows arrays and other kinds of containers to hold pointers to objects of differing types. Because assignment of values to variables usually occurs at run-time, this is necessarily a run-time phenomenon.


C++ also provides a dynamic_cast operator, which allows the program to safely attempt conversion of an object into an object of a more specific object type (as opposed to conversion to a more general type, which is always allowed). This feature relies on run-time type information (RTTI). Objects known to be of a certain specific type can also be cast to that type with static_cast, a purely compile-time construct which is faster and does not require RTTI. In programming, Runtime Type Information (RTTI, RunTime Type Identification) means keeping information about an objects datatype in memory at runtime. ...

Virtual member functions

Through virtual member functions, different objects that share a common base class may all support an operation in different ways. The member functions implemented by the derived class are said to override the same member functions of the base class. In contrast with function overloading, the parameters for a given member function are always exactly the same in number and type. Only the type of the object for which this method is called varies. In addition to standard member functions, operator overloads and destructors can also be virtual. This article or section should be merged with Virtual method In many object oriented programming languages such as C++, C#, VB.NET, a virtual function is a function that can be overridden with specialized implementations in subclasses. ... Method overriding, in object oriented programming, is a language feature that allows a subclass to provide a specific implementation of a method that is already provided by one of its superclasses. ...


By virtue of inherited objects being polymorphic, it may not be possible for the compiler to determine the type of the object at compile time. The decision is therefore put off until runtime, and is called dynamic dispatch. In this way, the most specific implementation of the function is called, according to the actual run-time type of the object. In C++, this is commonly done using virtual function tables. This may sometimes be bypassed by prepending a fully qualified class name before the function call, but calls to virtual functions are in general always resolved at run time. In computer science, dynamic dispatch is the process of mapping a message to a specific sequence of code (method) at runtime. ... A virtual method table, virtual function table, or vtable, is a mechanism used in Programming languages to support dynamic polymorphism, i. ... A fully qualified domain name (or FQDN) is an unambiguous domain name that specifies the nodes position in the DNS tree hierarchy absolutely. ...

An example
 #include <iostream> class Bird // the "generic" base class { public: virtual void OutputName() {std::cout << "a bird";} virtual ~Bird() {} }; class Swan : public Bird // Swan derives from Bird { public: void OutputName() {std::cout << "a swan";} // overrides virtual function }; int main() { Swan mySwan ; // Creates a swan. Bird* myBird = &mySwan; // Declares a pointer to a generic Bird, // and sets it pointing to a newly created Swan. myBird->OutputName(); // This will output "a swan", not "a bird". return 0; } 

This example program makes use of virtual functions, polymorphism, and inheritance to derive new, more specific objects from a base class. In this case, the base class is a Bird, and the more specific Swan is made.[2]


Parsing and processing C++ source code

It is relatively difficult to write a good C++ parser with classic parsing algorithms such as LALR(1) (see [1]). This is partly because the C++ grammar is not LALR. Because of this, there are very few tools for analyzing or performing non-trivial transformations (e.g., refactoring) of existing code. One way to handle this difficulty is to choose a different syntax, such as Significantly Prettier and Easier C++ Syntax which is LALR(1) parseable. A parser is a computer program or a component of a program that analyses the grammatical structure of an input, with respect to a given formal grammar, a process known as parsing. ... Look-Ahead LR parsers or LALR parsers are a specialized form of LR parsers that can deal with more context-free grammars than Simple LR parsers but less than LR(1) parsers can. ... Refactoring is the process of rewriting a computer program or other material to improve its structure or readability, while explicitly keeping its meaning or behavior. ... Significantly Prettier and Easier C++ Syntax or SPECS is an alternative syntactic binding for the semantics of C++ designed by Ben Werther and Damian Conway. ... Look-Ahead LR parsers or LALR parsers are a specialized form of LR parsers that can deal with more context-free grammars than Simple LR parsers but less than LR(1) parsers can. ...


Parsing (in the literal sense of producing a syntax tree) is not the most difficult problem in building a C++ processing tool. Such tools must also have the same understanding of the meaning of the identifiers in the program as a compiler might have. Practical systems for processing C++ must then not only parse the source text, but be able to resolve for each identifier precisely which identifier definition applies, e.g., correctly handle C++'s complex scoping rules, but must also be able to determine the type of each identifer and expression.


Finally, a practical C++ processing tool must be able to handle the variety of C++ dialects used in practice (GNU, Microsoft, ...), but also implement appropriate analyzers, source code transformers, and regenerate source text. Combining advanced parsing algorithms such as GLR with symbol table construction and program transformation machinery can enable the construction of arbitrary C++ tools.


Problems and controversies

Traditionally, producing a reasonably standards-compliant C++ compiler has proven to be a difficult task for compiler vendors in general. For many years, different C++ compilers implemented the C++ language to different levels of compliance to the standard, and their implementations varied widely in some areas such as partial template specialization. Recent releases of most popular C++ compilers support almost all of the C++ 1998 standard.[3] Partial template specialization is a method of optimizing generic code at compile time. ...


One particular point of contention is the export keyword, intended to allow template definitions to be separated from their declarations. The first compiler to implement export was Comeau C++, in early 2003 (5 years after the release of the standard); in 2004, the beta compiler of Borland C++ Builder X was also released with export. Both of these compilers are based on the EDG C++ front end. It should also be noted that many C++ books provide example code for implementing the keyword export (for example, Beginning ANSI C++ by Ivor Horton) which will not compile, but there is no reference to the problem with the keyword export mentioned. Other compilers such as GCC do not support it at all. Herb Sutter, secretary of the C++ standards committee, recommended that export be removed from future versions of the C++ standard [2], but finally the decision was made to leave it in the C++ standard [4]. ... The GNU Compiler Collection (usually shortened to GCC) is a set of programming language compilers produced by the GNU Project. ... Herb Sutter is one of the most prominent C++ experts. ...


In order to give compiler vendors greater freedom, the C++ standards committee decided not to dictate the implementation of name mangling, exception handling, and other implementation-specific features. The downside of this decision is that object code produced by different compilers are expected to be incompatible. There are, however, third party standards for particular machines or operating systems which attempt to standardize compilers on those platforms (for example C++ ABI[5]); some compilers adopt a secondary standard for these items. In software compiler engineering, name mangling (more properly called name decoration, although this term is less commonly used) is a technique used to solve various problems caused by the need to resolve unique names for programming entities in many modern programming languages. ... Exception handling is a programming language construct or computer hardware mechanism designed to handle the occurrence of some condition that changes the normal flow of execution. ... In computer science, object file or object code is an intermediate representation of code generated by a compiler after it processes a source code file. ... This article is about the computing term. ... An operating system (OS) is a computer program that manages the hardware and software resources of a computer. ...


Modern critics of the language raise several points. First, since C++ is based on and largely compatible with C, it inherits most of the criticisms levelled at that language. Taken as a whole C++ has a large feature set, including all of C, plus a large set of its own additions, in part leading to criticisms of being a "bloated" and complicated language, especially for embedded systems due to features such as exceptions and RTTI which add to code size. However, every compiler allows the developer to disable exceptions if desired. Bjarne Stroustrup also points out that resultant executables don't support these claims of bloat: "I have even seen the C++ version of the 'hello world' program smaller than the C version." [6] The Embedded C++ standard was specified to deal with part of this, but it received criticism for leaving out useful parts of the language that incur no runtime penalty.[3] Because of its large featureset it can be quite difficult to fully master C++, leading to programmers often bringing unnecessarily advanced or complicated solutions to simple problems. The programming language C is widely used, minimalistic and low-level by design. ... A router, an example of an embedded system. ... This article or section should be merged with datatype or runtime. ... To address the shortcomings of C++ for embedded applications, an industry group led by major Japanese CPU manufacturers, including NEC, Hitachi, Fujitsu, and Toshiba, has set out to define a new dialect of C++ called EC++. The goal of the effort is to preserve the most useful object-oriented features...


While C++ is more complex than some other programming languages, Bjarne Stroustrup points out that "The programming world is far more complex today than it was 30 years ago, and modern programming languages reflect that." [7]. The ISO standard of the C++ language is about 310 pages (excluding library). For comparison, the C programming language's is about 160 pages, even though it was designed more than 15 years prior and doesn't consider Object Oriented Programming. Furthermore, C#'s ECMA language definition document is about 440 pages. ISO has many meanings: Iso is the stem of the Latin transliteration of the Greek word ίσος (ísos, meaning equal). The iso- prefix in English derives from this and means equality or similarity. ... The title given to this article is incorrect due to technical limitations. ... ECMA is short for European Computer Manufacturers Association (Name of Ecma International until 1994) East Coast Music Awards European Carton Makers Association[1] ECMAScript This is a disambiguation page &#8212; a navigational aid which lists other pages that might otherwise share the same title. ...


C++ is also sometimes compared unfavorably with single-paradigm object-oriented languages such as Java, on the basis that it allows programmers to "mix and match" object-oriented and procedural programming, rather than strictly enforcing a single paradigm. This is part of a wider debate on the relative merits of the two programming styles. Object-oriented programming (OOP) is a programming paradigm that uses objects to design applications and computer programs. ... This does not cite its references or sources. ... Object-oriented programming (OOP) is a programming paradigm that uses objects to design applications and computer programs. ...


See also

Wikibooks
Wikibooks has a book on the topic of
Look up C++ in
Wiktionary, the free dictionary.

Image File history File links Wikibooks-logo-en. ... Wikibooks logo Wikibooks, previously called Wikimedia Free Textbook Project and Wikimedia-Textbooks, is a wiki for the creation of books. ... Wikipedia does not have an article with this exact name. ... It has been suggested that French Wiktionary be merged into this article or section. ...

More information

The C++ programming language allows programmers to define program-specific datatypes through the use of structures and classes. ... Compilers GNU Compiler Collection Integrated development environments (IDEs) C++ Builder Visual C++ Dev-C++ ... This is a list of operators in the C++ and C programming languages. ... C++0x, the new standard for the C++ programming language, will soon replace the current standard C++98. ...

Miscellaneous

The Boost C++ libraries are a collection of libraries that extend the functionality of C++. The libraries are licensed under the Boost Software License, designed to allow Boost to be used with a variety of projects. ... CodeSynthesis XSD is an XML Data Binding compiler for C++ developed by Code Synthesis and dual-licensed under the GNU GPL and a proprietary license. ... XML data binding refers to the process of representing the information in an XML document as an object in computer memory. ... OpenC++ is a software tool to parse and analyze C++ source code. ... In software compiler engineering, name mangling (more properly called name decoration, although this term is less commonly used) is a technique used to solve various problems caused by the need to resolve unique names for programming entities in many modern programming languages. ... Template metaprogramming is a programming technique in which templates are used by a compiler to generate temporary source code, which is merged by the compiler with the rest of the source code and then compiled. ... To meet Wikipedias quality standards, this article or section may require cleanup. ... Programming languages are used for controlling the behavior of a machine (often a computer). ...

References

  1. ^ Bjarne Stroustrup's FAQ - When was C++ invented?. Retrieved on 2006-05-30.
  2. ^ While this is a legal example, it should be noted that the use of "raw" pointers as in this example, along with the related use of explicit dynamic memory allocation via new and delete, is a common source of error and confusion in C++. It is much safer to do all dynamic memory management inside a class that manages these resources via constructor and destructor calls, to prevent such problems.
  3. ^ Herb Sutter (2003-04-15). C++ Conformance Roundup. Dr. Dobb's Journal. Retrieved on 2006-05-30.
  4. ^ Minutes of J16 Meeting No. 36/WG21 Meeting No. 31, April 7-11, 2003 (English) (2003-04-25). Retrieved on 2006-09-04.
  5. ^ C++ ABI. Retrieved on 2006-05-30.
  6. ^ Why is the code generated for the "Hello world" program ten times larger for C++ than for C?
  7. ^ Why is C++ so BIG?
  • Abrahams, David; Aleksey Gurtovoy. C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond. Addison-Wesley. ISBN 0-321-22725-5.
  • Alexandrescu, Andrei (2001). Modern C++ Design: Generic Programming and Design Patterns Applied. Addison-Wesley. ISBN 0-201-70431-5.
  • Becker, Pete (2006). The C++ Standard Library Extensions : A Tutorial and Reference. Addison-Wesley. ISBN 0-321-41299-0.
  • Alexandrescu, Andrei; Herb Sutter (2004). C++ Design and Coding Standards: Rules and Guidelines for Writing Programs. Addison-Wesley. ISBN 0-321-11358-6.
  • Coplien, James O. (1992, reprinted with corrections 1994). Advanced C++: Programming Styles and Idioms. ISBN 0-201-54855-0.
  • Dewhurst, Stephen C. (2005). C++ Common Knowledge: Essential Intermediate Programming. Addison-Wesley. ISBN 0-321-32192-8.
  • Information Technology Industry Council (2003-10-15). Programming languages — C++, Second edition, Geneva: ISO/IEC. 14882:2003(E).
  • Josuttis, Nicolai M. The C++ Standard Library. Addison-Wesley. ISBN 0-201-37926-0.
  • Koenig, Andrew; Barbara E. Moo (2000). Accelerated C++ - Practical Programming by Example. Addison-Wesley. ISBN 0-201-70353-X.
  • Lippman, Stanley B.; Josée Lajoie, Barbara E. Moo (2005). C++ Primer. Addison-Wesley. ISBN 0-201-72148-1.
  • Stroustrup, Bjarne (1994). The Design and Evolution of C++. Addison-Wesley. ISBN 0-201-54330-3.
  • Sutter, Herb (2001). More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Solutions. Addison-Wesley. ISBN 0-201-70434-X.
  • Sutter, Herb (2004). Exceptional C++ Style. Addison-Wesley. ISBN 0-201-76042-8.
  • Vandevoorde, David; Nicolai M. Josuttis (2003). C++ Templates: The complete Guide. Addison-Wesley. ISBN 0-201-73484-2.
  • A Critique of C++. Ian Joyner. Retrieved on March 31, 2006.

For the Manfred Mann album, see 2006 (album). ... May 30 is the 150th day of the year in the Gregorian calendar (151st in leap years). ... 2003 (MMIII) was a common year starting on Wednesday of the Gregorian calendar. ... April 15 is the 105th day of the year in the Gregorian calendar (106th in leap years). ... Dr. Dobbs Journal of Computer Calisthenics & Orthodontia with the subtitle Running Light without Overbyte was the full title of the pioneer microcomputer hobbyist newsletter published from early 1976 by Bob Albrecht and Dennis Allisons Peoples Computer Company. ... For the Manfred Mann album, see 2006 (album). ... May 30 is the 150th day of the year in the Gregorian calendar (151st in leap years). ... For the Manfred Mann album, see 2006 (album). ... September 4 is the 247th day of the year (248th in leap years). ... For the Manfred Mann album, see 2006 (album). ... May 30 is the 150th day of the year in the Gregorian calendar (151st in leap years). ... David Abrahams is a computer programmer and author. ... Andrei Alexandrescu is widely regarded as one of the foremost experts on advanced C++ programming. ... Andrei Alexandrescu is widely regarded as one of the foremost experts on advanced C++ programming. ... Jim Coplien is a writer in the field of Computer Science. ... 2003 (MMIII) was a common year starting on Wednesday of the Gregorian calendar. ... October 15 is the 288th day of the year (289th in leap years). ... Bjarne Stroustrup Bjarne Stroustrup (IPA: ) (born December 30, 1950 in Aarhus, Denmark) is a computer scientist and the College of Engineering Chair Professor of Computer Science at Texas A&M University. ... March 31 is the 90th day of the year in the Gregorian Calendar (91st in leap years), with 275 days remaining. ... For the Manfred Mann album, see 2006 (album). ...

External links

Materials

Tutorials

Electronic books

Support Bruce Eckel on the cover of Unix Review. ... Bruce Eckel on the cover of Unix Review. ... Charles Chuck D. Allison is an Associate Professor of Computer Science at Utah Valley State College in Orem, Utah. ...

Libraries and code repositories

Other

C programming language
Libraries: C standard library | glibc | Dietlibc | uClibc | Newlib
History: Criticism of the C programming language
Language Features: String | Syntax | Preprocessor | Variable types and declarations | Functions
Dialects: C++ | Objective-C
C and Other Languages: Compatibility of C and C++ | Operators in C and C++ | Comparison of Pascal and C | C to Java byte-code compiler


 
 

COMMENTARY     


Share your thoughts, questions and commentary here
Your name
Your comments

Want to know more?
Search encyclopedia, statistics and forums:

 


Lesson Plans | Student Area | Student FAQ | Reviews | Press Releases |  Feeds | Contact
The Wikipedia article included on this page is licensed under the GFDL.
Images may be subject to relevant owners' copyright.
All other elements are (c) copyright NationMaster.com 2003-5. All Rights Reserved.
Usage implies agreement with terms, 1022, m