An example of a subtle bug that you can run into in C and C++: accidentally overwriting another local variable. Such an issue can manifest only on certain systems, and can be hard to debug if you have not seen it before. An oldie but goodie.
Read More
Tag Archives: C++
When auto Seemingly Deduces a Reference in C++
One of the first things that C++ programmers learn about auto
is that bare auto never deduces a reference. In the present post, I show you two examples when it seemingly does. The first one involves proxy objects. The second one concerns structured bindings from C++17.
Read More
Consuming and Publishing Celery Tasks in C++ via AMQP
Celery is an asynchronous task queue based on distributed message passing. It is written in Python, but the protocol can be implemented in any language. However, there is currently no C++ client that is able to publish (send) and consume (receive) tasks. This is needed when your project is written in a combination of Python and C++, and you would like to process tasks in both of these languages. In the present post, I describe a way of interoperating between Python and C++ workers via the AMQP back-end (RabbitMQ).
Read More
Pros and Cons of Alternative Function Syntax in C++
C++11 introduced an alternative syntax for writing function declarations. Instead of putting the return type before the name of the function (e.g. int func()
), the new syntax allows us to write it after the parameters (e.g. auto func() -> int
). This leads to a couple of questions: Why was such an alternative syntax added? Is it meant to be a replacement for the original syntax? To help you with these questions, the present blog post tries to summarize the advantages and disadvantages of this newly added syntax.
Read More
Universal vs Forwarding References in C++
When talking about T&&
in C++, you may have heard about universal references and forwarding references. This may get you wonder. Why there are two names for an apparently same concept? Is there any difference between them? Which one should I use? Let’s find out.
Read More
Auto Type Deduction in Range-Based For Loops
Have you ever wondered which of the following variants you should use in range-based for loops and when? auto
, const auto
, auto&
, const auto&
, auto&&
, const auto&&
, or decltype(auto)
? This post tries to present rules of thumb that you can use in day-to-day coding. As you will see, only four of these variants are generally useful.
Read More
Structures and Member Initializers in C++
Since C++11, one can put the initialization of data members directly into structure or class definition. However, this change has consequences with regards to the construction of such structures. Indeed, by adding member initializers into a structure may render your previously working code non-compilable. In the present post, I describe this change, the related issues, and explain how to get around them.
Read More
Review of Modern C++ Programming with Test-Driven Development
My review of a book written by Jeff Langr entitled Modern C++ Programming with Test-Driven Development: Code Better, Sleep Better.
Read More
Improving C++98 Code With C++11
There are many projects written in C++98. Moreover, lots of programmers are still used to C++98. However, with the standardization of C++11 and C++14, C++98 is becoming obsolete. In this post, I would like to list some of the features of C++11 that can be used to improve C++98 code in situations where it is possible to use the new standard.
Read More
Review of Effective Modern C++
This month, a new book from one of the foremost C++ experts Scott Meyers became available: Effective Modern C++, subtitled 42 Specific Ways to Improve Your Use of C++11 and C++14. The present post gives my humble review of this jewel.
Read More