Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

13.03.2014, 20:38

Frage zu C++11's uniform initialization

Hi,
habe gerade Visual Studio 2013 installiert und kann jetzt endlich mit C++11's Uniform Initialization arbeiten.
Ich frage mich jetzt aber, ob es sinnvoll ist, meine ganzen Klassen wie folgt umzuschreiben:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// Vorher:
template <typename T> class Vector3
{
    public:
        Vector3(const T& vX, const T& vY, const T& vZ) :
            x(vX),
            y(vY),
            z(vZ)
        {
        }
        T x, y, z;
};

// Nachher:
template <typename T> class Vector3
{
    public:
        Vector3(const T& vX, const T& vY, const T& vZ) :
            x { vX },
            y { vY },
            z { vZ }
        {
        }
        T x, y, z;
};

Also was genau hat die Uniform Initialization gegenüber der alten Initialization (bei Klassen-Konstruktoren) für Vorteile?

In folgendem Beispiel ist mir der Vorteil schon eher ersichtlich:

C-/C++-Quelltext

1
2
SetViewport(const Point2D& position, const Size2D& size) { /* ... */ }
SetViewport({0, 0}, {800, 600});

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

2

13.03.2014, 23:30

Keine.
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

3

14.03.2014, 10:42

Es ist nur Syntax. Ich finde das Konstruieren kleiner Strukturen damit sehr praktisch, aber abgesehen davon ist es wurscht.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Evrey

Treue Seele

Beiträge: 245

Beruf: Weltherrscher

  • Private Nachricht senden

4

14.03.2014, 15:06

Ist letztendlich dein Bier, ob du das nutzt. Ich verwende diese tollen Spielereien, wie das Beispiel mit SetViewport, weshalb ich konsequenter Weise alle Konstruktoren in dieser Syntax (um-)geschrieben habe.

C-/C++-Quelltext

1
2
3
4
int main(int _argc, char** _argv) noexcept {
  asm volatile("lock cmpxchg8b %eax");
  return 0;
} // ::main
(Dieses kleine Biest vermochte einst x86-Prozessoren lahm zu legen.)

=> Und er blogt unter Hackish.Codes D:

Fourb

Treue Seele

Beiträge: 122

Beruf: Schüler

  • Private Nachricht senden

5

15.03.2014, 20:34

Was noch hinzuzufügen ist:
Es heißt nicht umsonst "Uniform Initialization" - sowohl für die Wertzuweisung im Konstruktor, als auch für die Definition von std::string, sieht es meiner Meinung nach viel schöner und einheitlicher aus. Man kann es eigt. für jede Initialisierung nutzen, wobei es bei Ganzzahlen etwas komisch erscheint.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Bla
{
private:
    std::string foo;
    int bar;
public:
    Bla(const std::string& foo, const int& bar) : foo{foo}, bar{bar} {}
};

//...

std::string foo{"Test"};
int bar{1337};

//...


Also Fazit: Sieht einheitlich und schöner aus. :D
Sollte aber keine Performance-Vorteile mit sich bringen.
42 / Pi = 13,37

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

6

15.03.2014, 21:13

Hier im Video sagt Herb Sutter sehr gut, in welchen Situationen Uniform Initialization unnötig ist.
Mir war nur nicht klar, was der Vorteil sein soll, im Konstruktor nur noch {...} anstatt (...) zu schreiben.
Und danke für Antworten :-)

Werbeanzeige