An example from the standard of the language of clause 12.6.2 / 9 (by the way, the question relates to c ++ 11 and has not changed in c ++ 14):
If you ’ve been given the data, you ’ve been ignored. [Example: Given
struct A { int i = /∗ some integer expression with side effects ∗/ ; A(int arg) : i(arg) { } // ... };
It is a design that will make it easy to make it . —End example]
Translating into Russian: If a non-static data member has as an initializer directly in the class definition (via = or {} ), i.e. brace-or-equal-initializer , and the member initializer in the constructor initializer , i.e. mem-initializer , then only initialization will be performed in the constructor. Initialization directly in the class will be ignored. This rule applies to the delegation of constructors (indirect initialization).
Additionally, I want to note that initialization, by definition, can be done no more than once, changing the value of a variable in the future is already an assignment.