Articles & Books

CppQuiz.org officially launched -- Anders Schau Knatten

Anders Schau Knatten recently launched the new site CppQuiz.org inspired largely by Olve Maudal's C++ pub quizzes. So grab a refreshing beverage, pull up a chair, and try a few to start off the first week of December...

CppQuiz.org officially launched!

by Anders Schau Knatten

From the announcement:

What is it

CppQuiz.org is (as you might have guessed by now) an online C++ quiz. Each question is a full C++ program, and you are to figure out what its output is. I stole this format from Olve Maudal's pub quizzes, but with one major difference: While his quizzes are about what happens on his computer (which is very interesting for a more interactive format), CppQuiz.org asks about what the standard mandates the output to be. If the example code doesn’t compile, or has unspecified/undefined behaviour, you answer that.

The site will just keep throwing questions at you (training mode), optionally giving you a hint and finally give you a full explanation of the answer, with references to the C++11 standard. If you want, you can however start a new quiz (quiz mode), and get a fixed number of questions. At the end you get a score, and a link to give your friends to see if they can beat you. Neither mode requires you to register or log in.

How you can help

If you like the quiz and want to help, there are many ways to do so:

  • Create your own questions, as many have done
  • Help improve the design (pull requests, e-mail, Twitter)
  • Help improve the functionality (pull requests, e-mail, Twitter)
  • Any other feedback (comments to this post, e-mail, Twitter)

Tips for founding new (C++) user groups -- Jens Weller

We're seeing quite a few new C++ user groups being formed, and so it's a good time to link to this timely article by Jens Weller:

Founding local C++ User Groups

From the article:

Lets start into the discussion on founding user groups, there is in my opinion different approaches to get started, but I don't want this to be a discussion, so I'll just list what I think is right. First I think that a C++ User Group should be local, which means its usually for a certain region. From my expierence, people are willing to travel up to 70km one way to a user group meeting. So in order to get started, I think you'll need the following four points:

  • People
  • Location
  • Topics
  • Date

...

Quick Q: When do you need to declare a variable constexpr? -- StackOverflow

Quick A: When you want to use the variable in a way that requires its value to be known at compile time.

Here's a short nugget that helps demonstrate the meaning of constexpr:

Why is constexpr required even though member function is constexpr?

The following does not compile unless I put constexpr before initializer_list:

constexpr std::initializer_list<int> il = {
    1, 2, 3, 4, 5, 6, 7, 8, 9, 10
};
std::array<int, il.size()> a;

But initializer_list size is constexpr:

constexpr size_type size() const;

What are inline namespaces good for? -- StackOverflow

Quick A: For source-level library versioning.

A StackOverflow classic:

What are inline namespaces for?

C++11 allows inline namespaces, all members of which are also automatically in the enclosing namespace. I cannot think of any useful application of this -- can somebody please give a brief, succinct example of a situation where an inline namespace is needed and where it is the most idiomatic solution?

(Also, it is not clear to me what happens when a namespace is declared inline in one but not all declarations, which may live in different files. Isn't this begging for trouble?)

Quick Q: Why write "5 == myValue" instead of "myvalue == 5"? -- StackOverflow

Quick A: Because it catches most cases where you accidentally wrote = instead of ==.

From SO:

Reason for using '5 == myValue' in conditionals

I've come across some code that flips how a condition is checked and was wondering why this would be done aside from a weird personal quirk. I've never seen any text books use it nor have I seen any sample code done this way.

// why do it this way?
if (5 == myValue)
{
    // do something
}

// instead of:
if (myValue == 5)
{
    // do something
}

I've only seen this way for == operand but not for any other operands.

Deleted Functions in C++11 -- Fang Lu

Here is a quick overview of =delete from the IBM Cafe's tour of C++ features.

Note: This summary article focuses on applying =delete to special member functions, which is a main use case. However, be aware that that's only part of the story, because =delete can also apply to regular member function and free function overloads to suppress specific overloads with nice compile-time errors. We invite authors to write about this aspect as well -- just write about it on your own blog and and send us a link to your post via 'Suggest an Article' at the top of this page (you must be logged in to isocpp.org to see this option).

Deleted functions in C++11

by Fang Lu

The deleted functions feature is introduced into the C++11 standard. In this article, I will explain this feature and provide some examples on how to use it...

Concept Checking in C++11 -- Eric Niebler

While we're waiting for Concepts Lite, Eric shows how we can already do quite a bit in C++11 while planning for a transition to language support when it's available.

Concept Checking in C++11

by Eric Niebler

From the article:

This post describes some utilities I’ve recently developed for doing concept checking in C++11. These utilities are part of an ongoing project to reimplement ranges, also for C++11, but I think the concept checking utilities are useful and interesting in their own right...

Basic Structure of C++ Program -- Prashant Sharma

[Ed.: This is a simple short "hello world" overview for someone starting to program in C++, and is basically correct. There are lots of expert-friendly articles, but we like and want to encourage the beginner- and intermediate-level articles as well for the benefit of the many recent newcomers to the language.]

Basic Structure of C++ Program

The easiest way to understand the basic structure of C++ program is by writing a program. The basic C++ program is as follows: ...

Quick Q: Why is std::vector contiguous? -- StackOverflow

Quick A: Because if you're serious about performance, you'll often (not always) use contiguous arrays.

From SO:

Why is std::vector contiguous?

Besides the fact that the standard defines it to be contiguous, why is std::vector contiguous?

If it runs out of space, it needs to reallocate a new block and copy the old block to the new one before continuing.

What if it wasn't contiguous? When the storage fills up, it would just allocate a new block and keep the old block. When accessing through an iterator, it would do simple >, < checks to see which block the index is in and return it. This way it doesnt need to copy the array every time it runs out of space.

Would this really work/be better? or am i missing something?