Questions tagged [c++]

C++ is a general-purpose programming language. Initially, it was designed as an extension to C and has a similar syntax, but it is now a completely different language. Use this tag for questions about code (to be) compiled with a C++ compiler. Use a version-specific tag for questions related to a specific standard revision [C++11], [C++14], [C++17], [C++20], [C++23], or [C++26], etc.

What is C++?

C++ is a (mostly) statically-typed, free-form, (usually) compiled, multi-paradigm, intermediate-level general-purpose programming language; not to be confused with C or C++/CLI. It was developed in the early 1980s by Bjarne Stroustrup, initially as a set of extensions to the C programming language. Building on C, C++ improved type-safety and added support for automatic resource management, object orientation, generic programming, and exception handling, among other features.


New to C++?

Whether you are new to programming or coming to C++ from another programming language, it is highly recommended to have a good book from which to learn the language. We keep a detailed list of books.

If you are looking for good compilers, GCC is the most commonly used compiler on Linux and other Unix-like platforms; Clang is the official compiler on Mac and FreeBSD; Microsoft Visual C++ is the most commonly used compiler on Windows. The Intel® C++ Compiler is also commonly used for its optimized numerical computations on Windows, Linux, and Mac.

Turbo-C++ 3.0 is from 1991, extremely outdated, and not recommended. See the previous paragraph for free choices from this millennium.

Join us in chat, where we discuss C++, programming in general, and even other stuff when the sun goes down and boredom creeps in. Don't forget your sense of humor, but keep it civilized.


Tag usage

When posting questions about C++ programming, please make sure to include:

  • Target system and compiler information. This includes the compiler name, version, and settings used to compile.
  • If your question is specific to one particular version of the language, add , , , or . Questions about boost should add the tag . Details about the different versions can be found further below in this wiki.
  • Unless the question explicitly mentions which version of the C++ standard is used, it is assumed that the current version is used. That is, whichever version of ISO 14882 ISO currently lists as active. Please have this in mind when answering or commenting on questions tagged .

Using and together

C and C++ are two distinct and often incompatible languages. Avoid using both tags in the same question unless you have good reasons.

A question should be tagged with only, if:

  • It contains pure C, with no trace of C++, or questions with code that could be either language.
  • The code is compiled with a C compiler.

A question should be tagged with only, if:

  • It contains code with any C++ features. Even though the code may be "C style".
  • The code is compiled with a C++ compiler.

A question should be tagged with both and if it is about:

  • Specific differences between C and C++.
  • Compatibility or porting code between C and C++.
  • C++ code that uses C libraries (for example code using extern "C").

Editing and moderation guidelines for posts with both and tags:

To edit/re-tag/moderate questions with both tags, it is recommended that you have full edit privileges and either a gold or a gold badge.

If you encounter a post with both tags, edit/re-tag it if needed according to the above rules. If you can tell the language by reading the posted code, simply edit tags accordingly. Avoid prompting the user "is it C or C++?" in comments unless the question is truly unclear.

One example of an unclear question is when the user explicitly claims that they are programming in C, but posts code or compiler messages for C++. If so, prompt for clarification and close vote as unclear.

"Either C or C++ is fine" opinions from the OP are a strong indication of a poor or unclear question. Answers may be very different depending on the language picked. Prompt for clarification, close as unclear/too broad until the OP has clarified this.

Be careful about re-tagging questions once there are answers posted, particularly if there are already both C and C++ answers posted. In such cases, the tags should be left alone, since changing them would make posted answers invalid.

Answers with C++ code to a C question that has never been tagged should be deleted as off-topic. Please check the question edit history before flagging/deleting such answers, to verify that the question never had the C++ tag.


C++98

In 1998, the C++ standards committee published the first international standard for C++ ISO/IEC 14882:1998, which would be informally known as C++98.


C++03

In 2003, the C++ Committee responded to multiple problems that were reported with and revised it accordingly. The changed language was dubbed C++03.


C++11

The language standard remained pretty much the same for a long time, but in 2011 a new standard, C++11 (formerly known as C++0x) was published in ISO/IEC 14882:2011. Rather than in a "big bang" approach, it is being rolled out gradually as compilers are supporting the new language features. See Bjarne Stroustrup's C++11 FAQ to see what is new in the language, and check your own compiler's FAQ to see which of those features are currently supported:

A few features that had been under discussion for C++11 have been deferred to the next iteration.


C++14

C++14 is a small extension of C++11. It was approved in August 2014 and released in December of the same year. Previously referred to as C++1y the year of approval was uncertain. Many popular compilers already have some level of C++14 support.


C++17

C++17 adds a few more major features (and several minor ones). It is usually referred to as C++1z or C++17, as technical work on the new standard was completed in March of 2017. The draft standard was approved (unanimously) by the ISO in September 2017 and officially published in December 2017.


C++20

In February 2020 the C++ Standard committee completed work on C++20. It was unanimously approved later that year and got officially published in December 2020.

The following (and more) new features have already been accepted into the C++20:


C++23

The following (and more) new features have already been accepted into the C++23 draft:


C++26

The following (and more) new features have already been accepted into the C++26 draft:


Online compilers

If you want to give C++ a spin, you can try one of the following online compiler services:

  • Coliru (GCC, Clang)
  • ideone.com (GCC, Clang)
  • codepad (GCC)
  • rextester (GCC, Clang, Visual C++)
  • repl.it (GCC)
  • ELLCC (Clang)
  • CodingGround (GCC)
  • C++Shell (GCC)
  • Wandbox (GCC, Clang)
  • Compiler Explorer (GCC, Clang, ICC, Visual C++). Many versions of GCC/Clang for x86, and also for some non-x86 architectures (ARM, ARM64, PPC, and AVR), as well as the latest versions of Microsoft Visual C++. Beside execution (./a.out button), it includes nicely formatted assembler output, even optionally color-highlighting source and assembler lines to help find which source line maps to which assembler line.
  • C++ Insights (Clang) Trans-compiler of code that shows the C++98 code that maps on modern constructs
  • Quick bench (GCC, Clang) Micro benchmarking tool intended to quickly and simply compare the performances of code snippets.


Stack Overflow's C++ FAQ


External FAQs


Other External Resources


Chat Rooms

798869 questions
1665
votes
7 answers

Why does changing 0.1f to 0 slow down performance by 10x?

Why does this bit of code, const float x[16] = { 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6}; const float z[16] = {1.123, 1.234, 1.345, 156.467, 1.578,…
GlassFish
  • 14,851
  • 3
  • 17
  • 22
1642
votes
14 answers

What are rvalues, lvalues, xvalues, glvalues, and prvalues?

In C++03, an expression is either an rvalue or an lvalue. In C++11, the two value categories have become five: rvalue lvalue xvalue glvalue prvalue What are these new categories of expressions, and why are they needed? How do these new categories…
James McNellis
  • 348,265
  • 75
  • 913
  • 977
1626
votes
28 answers

Why do we need virtual functions in C++?

I'm learning C++ and I'm just getting into virtual functions. From what I've read (in the book and online), virtual functions are functions in the base class that you can override in derived classes. But earlier in the book, when learning about…
Jake Wilson
  • 88,616
  • 93
  • 252
  • 370
1619
votes
11 answers

Replacing a 32-bit loop counter with 64-bit introduces crazy performance deviations with _mm_popcnt_u64 on Intel CPUs

I was looking for the fastest way to popcount large arrays of data. I encountered a very weird effect: Changing the loop variable from unsigned to uint64_t made the performance drop by 50% on my PC. The Benchmark #include #include…
gexicide
  • 38,535
  • 21
  • 92
  • 152
1618
votes
23 answers

Compiling an application for use in highly radioactive environments

We are compiling an embedded C++ application that is deployed in a shielded device in an environment bombarded with ionizing radiation. We are using GCC and cross-compiling for ARM. When deployed, our application generates some erroneous data and…
rook
  • 66,304
  • 38
  • 162
  • 239
1590
votes
18 answers

Cycles in family tree software

I am the developer of some family tree software (written in C++ and Qt). I had no problems until one of my customers mailed me a bug report. The problem is that the customer has two children with their own daughter, and, as a result, he can't use my…
Partick Höse
  • 11,121
  • 3
  • 15
  • 9
1360
votes
8 answers

Where and why do I have to put the "template" and "typename" keywords?

In templates, where and why do I have to put typename and template on dependent names? What exactly are dependent names anyway? I have the following code: template // Tail will be a UnionNode too. struct UnionNode :…
MSalters
  • 173,980
  • 10
  • 155
  • 350
1257
votes
27 answers

When should you use a class vs a struct in C++?

In what scenarios is it better to use a struct vs a class in C++?
Alan Hinchcliffe
  • 12,862
  • 3
  • 18
  • 11
1234
votes
17 answers

What is the difference between public, private, and protected inheritance in C++?

What is the difference between public, private, and protected inheritance in C++? All of the questions I've found on SO deal with specific cases.
user106599
1226
votes
19 answers

How do I use extern to share variables between source files?

I know that global variables in C sometimes have the extern keyword. What is an extern variable? What is the declaration like? What is its scope? This is related to sharing variables across source files, but how does that work precisely? Where do I…
shilpa
1224
votes
8 answers

What is the difference between 'typedef' and 'using' in C++11?

I know that in C++11 we can now use using to write type alias, like typedefs: typedef int MyInt; Is, from what I understand, equivalent to: using MyInt = int; And that new syntax emerged from the effort to have a way to express "template…
Klaim
  • 67,274
  • 36
  • 133
  • 188
1209
votes
9 answers

What are POD types in C++?

I've come across this term POD-type a few times. What does it mean?
oz10
  • 153,307
  • 27
  • 93
  • 128
1154
votes
20 answers

Can a local variable's memory be accessed outside its scope?

I have the following code. #include int * foo() { int a = 5; return &a; } int main() { int* p = foo(); std::cout << *p; *p = 8; std::cout << *p; } And the code is just running with no runtime exceptions! The…
Avi Shukron
  • 6,088
  • 8
  • 50
  • 84
1146
votes
7 answers

push_back vs emplace_back

I'm a bit confused regarding the difference between push_back and emplace_back. void emplace_back(Type&& _Val); void push_back(const Type& _Val); void push_back(Type&& _Val); As there is a push_back overload taking a rvalue reference I don't quite…
ronag
  • 49,529
  • 25
  • 126
  • 221
1145
votes
10 answers

What is the difference between g++ and gcc?

What is the difference between g++ and gcc? Which one of them should be used for general c++ development?
Brian R. Bondy
  • 339,232
  • 124
  • 596
  • 636