Modern C++ at a Glance — A Language a Day, Advent Calendar 2019 Day 5/24

About this ‘A Language a Day’ Advent Calendar 2019 Welcome to Day 5 of this year’s A Language a Day Advent Calendar. Today’s topic is an overview of the very-well updated C++ programming language. C++ feels like a new languageB. Straustrup, A Tour of C++ You may reasonably ask what’s up with C++? It appeared about … Continue reading “Modern C++ at a Glance — A Language a Day, Advent Calendar 2019 Day 5/24”

Initializer lists in C++

Initializer lists, or if you prefer, initialiser lists, are a great addition of C++ 11, which allows you to 1) initialize your list-like classes and 2) uniform the initialisation of such objects comparing to what you can do with the built-in types. Let us demonstrate it on the following example, which uses a simple array … Continue reading “Initializer lists in C++”

Avoiding naked new in modern C++

The old-days way of acquiring memory resources is to have a pair of malloc and free calls. The C++’s addition, the new and delete keywords simplified the syntax, but did not eliminate the problem of proper memory management. The Problem Here is a typical approach: you create some place for your data, get a pointer, … Continue reading “Avoiding naked new in modern C++”

Concurrent atomic operations in C++ and Raku

Here’s a problem to solve: you have two threads, each incrementing the same single counter N times. What is the state of the counter at the end of the program? A straightforward solution A naïve C++ program can be written using the standard library threads like this: #include <iostream> #include <thread> int counter; void f() {     for (int c = 0; c != 100000; c++) counter++; } int main() {     std::thread thread_a {f}; … Continue reading “Concurrent atomic operations in C++ and Raku”

Iterators vs. auto in C++

The range-based for loop that is available since the C++ 11 standard, is a wonderful mean of making the code compact and clean. This post is totally dedicated to a single go: to show the difference between iterating using STL iterators and using for ranges. Here’s a simple code that creates a vector of integers … Continue reading “Iterators vs. auto in C++”

A range-for loop in C++

The so-called range-based for loop appeared in the C++ 11 standard, together with the auto keyword gives us a very powerful and idiomatic way of looping over things. Let’s start with a simple array. #include <iostream> int main() {     int odd_data[] = {1, 3, 5, 7, 9};     for (auto x : odd_data)         std::cout << x << “\n”; } Here, the for loop goes over all the elements of the odd_data array, and you … Continue reading “A range-for loop in C++”

constexpr in C++ 11 and C++ 14

In the previous post, we were talking about the constexpr keyword in modern C++. It was added to the C++ 11 standard, but in C++ 14, it got a very nice addition. In particular, you can do more in constexpr functions now. Consider the following program that wants to pre-compute a factorial of 5. #include <iostream> … Continue reading “constexpr in C++ 11 and C++ 14”

constexpr in C++

The constexpr keyword is a relatively new addition to C++. You need to use the C++11 standard in order to compile the following programs: g++ -std=c++11 test.cpp Let’s examine what the keyword is about. There’s no difficulty to split it into words to get the meaning: constant expression. In practice, constant expression means that the … Continue reading “constexpr in C++”