Wann Kopier-Initialisierung?

12/09/2016 - 20:26 von ram | Report spam
(Ich setze für diese Frage teilweise C++17 voraus, also
daß nach

auto i{ 2 };

»i« den Typ »int« hat, aber man kann man die Frage auch
verstehen, wenn man nur C++11 kennt:)

In manchen Fàllen hat

T v{ e }

dasselbe effektive Verhalten wie

T v = e;

. Welche Schreibweise sollte man dann bevorzugen?

Hierbei steht »T« für eine <decl-specifier-seq>,
»v« für einen <declarator> und »e« für eine
<initializer-clause>.

Ich sehe als Vorteil der ersten Syntax an, daß es sich
um die "uniform initialization syntax" handelt, es also
einheitlich ist, sie möglichst oft zu verwenden, was auch
oft möglich ist.

Als Vorteil der zweiten Schreibweise sehe ich es aber
an, daß sie eventuell unbeabsichtigte implizite
Wandlungen verhindert. (Ich möchte aber nicht gelten lassen,
daß es für alte C-Programmierer, welche die Initialisierung
mit Klammern nicht kennen, "vertrauter" aussieht, weil
dieses Kriterium meiner Meinung nach heute keine Rolle
mehr spielen sollte.)
 

Lesen sie die antworten

#1 Jens Kallup
13/09/2016 - 19:49 | Warnen spam
Am 12.09.2016 um 20:26 schrieb Stefan Ram:
T v{ e }

dasselbe effektive Verhalten wie

T v = e;

. Welche Schreibweise sollte man dann bevorzugen?



"int" und "char" haben fast den selben Wertebereich.
Ich bevorzuge das wie in c üblich zu casten.
Oder Du frimmelst den typename und/oder typeid herum.

Jens

Ähnliche fragen