< KritaRevision as of 02:49, 15 October 2015 by Miabrahams (talk | contribs) (→C++11 features mostly for template programming)(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff) Contents 1 General links to about using C++11 2 Particular Features 2.1 Type Inference (auto) 2.2 Range-based for loop 2.3 General Initializer Lists 2.4 Lambdas 2.5 constexpr 2.6 Override and final 2.7 <algorithm> 2.8 enum class 2.9 nullptr 2.10 Deleted and default class members 2.11 unique_ptr 2.12 Performance-related (rvalues) 2.12.1 Move Constructors 2.12.2 Reference Qualifiers 2.13 C++11 features mostly for template programming 2.14 Other C++11 features that probably cannot be used General links to about using C++11 There have been a few links discussing mixing C++11 with Qt, and starting with Qt 5.6 C++11 support will be default. Note: as would be expected from those interested in hot new technology, the writers of most of these links demonstrate Silicon Valley levels of extreme optimism. Take this with a grain of salt: there is no such thing as a free lunch. ICS.com qt.io woboq.com: c++11 in Qt5 woboq.com: c++14 in Qt5 FOSDEM 2013 presentation slides Bjarne Stroustrup's C++11 FAQ - the grand daddy Particular Features Under "drawbacks," every item should list: "Programmers will face another feature they must learn about." Type Inference (auto) Motivation: Drawbacks: Recommendation: Range-based for loop Motivation: Drawbacks: Warning: c++11 range-based for may be slower Recommendation: General Initializer Lists Motivation: Member Initializers Mixed uniform initialization Drawbacks: Recommendation: Lambdas Motivation: Lambda expressions for slots "C++11 lambdas are your friend" Drawbacks: Recommendation: constexpr Motivation: Can speed things up inside hot loops. KDAB: speed up your Qt 5 programs using C++11 Drawbacks: Recommendation: Override and final Motivation: Drawbacks: Recommendation: <algorithm> Motivation: Drawbacks: Recommendation: enum class Motivation: Drawbacks: Recommendation: nullptr Motivation: Drawbacks: Recommendation: Deleted and default class members Motivation: Drawbacks: Recommendation: unique_ptr Motivation: Here is a glowing review of unique_ptr. This is really about a philosophy of C++ memory management, not just a particular smart pointer type. The idea is that whenever you create an object on the heap, you should always house it inside a smart pointer. The reason this philosophy had to wait for unique_ptr is that unique_ptr is the first time they 'got it right.' Most importantly, the class uses negligible overhead. In particular: sizeof(unique_ptr<T*>) = size_t, it can be passed as a function argument without copying, and dereferencing is inline. Drawbacks: The philosophy mentioned above can be summarized like this: we should state up front what we are going to prohibit programmers from doing. Like the const keyword, unique_ptr puts restrictions on what can be done with the pointer, the main one being, it cannot be copied. Like enforcing const correctness, this can be annoying to get right throughout a codebase. One particular limitation is that Qt container classes. For example QVector<std::unique_ptr> is invalid, because QVector requires its members can be copied. This makes converting to unique_ptr a bit slow, since QVector<T *> will have to be converted to std_array<unique_ptr<T*>>. If the owner was being copied before, it will become uncopiable. This can be a good thing, but it is work. Recommendation: Performance-related (rvalues) Using move constructors and rvalues are very subtle and advanced features, but widely celebrated as successes of C++11. In general these should be used inside hot paths and when we sling around objects from place to place. C++ programmers should already be aware that writing performant code inside hot paths will sometimes require slinging around ampersands. These features will naturally stay confined to the corners of the codebase where they belong, and should be introduced when they are useful. Tutorial for rvalue references KDAB: speed up your Qt 5 programs using C++11 Move Constructors Motivation: Drawbacks: Recommendation: Reference Qualifiers Motivation: Drawbacks: Recommendation: C++11 features mostly for template programming Krita makes very light use of templates. These features are useful, coming across them in the code base will add complexity for new learners, and have not been necessary so far. decltype : this is the most likely to be useful, for example, in input handling teplates. static_assert std::function and std::bind variadic templates Other C++11 features that probably cannot be used Threads (Qt/KDE use an incompatible threading model) shared_ptr and weak_ptr (Relies on C++ threading model; use KisSharedPointer) New literal types (already have QString) Extended Unions (already have QVariant) Retrieved from "https://community.kde.org/index.php?title=Krita/C%2B%2B11&oldid=44503" Content is available under Creative Commons License SA 4.0 unless otherwise noted.