I’m not posting anything since GDC, and the reason is that I’m not working on C++ very much lately, because I’m quite busy in trying to make some sense out of the shamanic art they call deep learning. Luckily I’ve been invited to talk at the Italian C++ Day in Firenze on October 29th (http://www.italiancpp.org/event/cppday16/, …
Continue reading A digression…C++
NOTE (2016/03/26 01:30PM): The content of this post has has been fixed. I must thank Lawrence Crowl for pointing out my mistake at SG14 GDC 2016 meeting. It is well known that using ordering comparison operators (<, <=, >, >=) with mixed signed/unsigned types result in warnings and, ultimately, in undefinedunexpected behaviour. I never loved this, and I …
Continue reading Signed/Unsigned operations and undefined behaviourDiscussing with another C++ programmer, we came out with this piece of code: #include <iostream> template <class… Args> void foo(int, Args…) { std::cout << “1”; } template <class…Args> void foo(Args…, int) { std::cout << “2”; } int main() { foo(11); // A foo<>(11); // B foo(11, 33); // C foo<int>(11, 33); // D foo(11, 22, 33); // E foo<int, int>(11, 22, 33); // F } I was pretty convinced that all the calls to foo were ambiguous, so I decided to test it with different …
Continue reading Curiosity #20160225A nullptr is a representation of the null pointer that implicitly converts into any pointer type, but not into an integral type. nullptr, and its type nullptr_t, have been standardised in C++11, but its introduction predates the standard by at least 15 years, since the idea is contained in Scott Meyer‘s book Effective C++, 2nd edition, published in 1996. Despite …
Continue reading Use nullptr if you can, 0 if you need, but please don’t use NULLI’m preparing some slides to explain how to write better code with C++11/14, and I wanted to start from the last thing I wrote about here, the use of keywords final and override. The scope of my previous post, albeit a bit cryptic, was to show how those keywords are context-sensitive, so you can also use final and override as type names, as …
Continue reading Final & Override againnamespace override { class override { }; class override_final { ::override::override override; public: virtual ::override::override & final() { return override; } }; } namespace final { class final final : public override::override { }; class final_override final : public override::override_final { ::final::final override; public: ::final::final & final() override final { return override; } }; } …
Continue reading Please, use final and override!Naming a method after the class Consider this class: struct B { B() {} int B() { return 42; } // FAIL! }; This code is illegal because a method name can’t be named after the class name. I was wondering if there’s a particular reason for this, since it’s a restriction you can easily overcome by writing: struct …
Continue reading Naming restrictions for methods in C++In these days I’m porting a library from Qt4 to Qt5, and here’s how sticking to C++11 syntax has helped me catching a subtle porting problem. I had a class subclassing QTcpServer, overriding a virtual method with this syntax: void incomingConnection(int descriptor) override; Specifying the method as override was enough to discover a breaking change in …
Continue reading Override and errorsLast month I bought a bunch of Raspberry PI 2 and started playing with them. I was a bit disappointed about the lack of modern tools in the standard Raspbian Wheezy distro, but I found out that Debian 8.0 (Jessie) is more advanced on that, but the process of downloading the image, modifying the files, …
Continue reading Using Raspberry PI 2 as a C++11/14 playgroundI never managed to remember the match between Visual Studio version, Visual C++ compiler version and Microsoft C/C++ compiler version. I took a minute to collect all the data quite some time to collect all this information, and leave it here for future reference: Product IDE version Solution version(s) Platform toolset _MSC_VER Visual Studio 2019 …
Continue reading Microsoft Visual C++ version Map