Attributes in C++11/C++14
Let's take a look at specific attributes in C++ 11 and attribute additions in C++ 14.
We'll cover the following
Specifying Annotations in C++11
C++11 took one big step to minimize the need to use vendor specific syntax. By introducing the standard format, we can move a lot of compiler-specific attributes to the universal set.
C++11 provides a cleaner format of specifying annotations over our code.
The basic syntax is just [[attr]]
or [[namespace::attr]]
.
You can use [[attr]]
over almost anything: types, functions, enums, etc., etc.
For example:
[[attrib_name]] void foo() { } // on a function
struct [[deprecated]] OldStruct { } // on a struct
Attributes in C++11
[[noreturn]]
:
It tells the compiler that control flow will not return to the caller. Examples:
[[noreturn]] void terminate() noexcept;
- functions like
std::abort
orstd::exit
are also marked with this attribute.
[[carries_dependency]]
:
Indicates that the dependency chain in release-consume std::memory_order
propagates in and out of the function, which allows the compiler to skip unnecessary memory fence instructions. Mostly to help to optimise multi-threaded code and when using different memory models.
C++14 Additions
[[deprecated]] and [[deprecated("reason")]]
:
Code marked with this attribute will be reported by the compiler. You can set a “reason” why.
Example of [[deprecated]]:
Get hands-on with 1400+ tech skills courses.