Nein, es ist nicht äquivalent. Überhaupt sind die beiden Codeteile nur vage vergleichbar, wenn Object eine Basisklasse von Foo ist, in welchem Fall letzterer Code lediglich eine temporäre Object-Instanz in Foo::Foo() erzeugt und this völlig unverändert lässt.
Die Initialisierungsliste ist in zwei Zusammenhängen interessant - Basisklassen bzw. Memberobjekte mit parametrisierten Konstruktoren und Referenzen. Zum Beispiel:
C++:
#include <iostream>
struct A { A(int x) { std::cout << x << std::endl; } };
struct B { B() : a(2) { } // Ruft A::A(int) mit x = 2 auf
A a; };
struct C { C(A &b) : a(b) { } // bindet a an b
A &a; };
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra
Nein, es ist nicht äquivalent. Überhaupt sind die beiden Codeteile nur vage vergleichbar, wenn Object eine Basisklasse von Foo ist, in welchem Fall letzterer Code lediglich eine temporäre Object-Instanz in Foo::Foo() erzeugt und this völlig unverändert lässt.
Genau das ist der Fall. Was passiert dabei im ersten Fall, denn Object ist in diesem Fall keine Instanz sondern der Klassenname.
Zitat von 0xdeadbeef:
C++:
#include <iostream>
struct A { A(int x) { std::cout << x << std::endl; } };
struct B { B() : a(2) { } // Ruft A::A(int) mit x = 2 auf
A a; };
struct C { C(A &b) : a(b) { } // bindet a an b
A &a; };
Man könnte aber doch ganz normal auch
C++:
struct B { B() { a(2); }
A a; };
schreiben. Das dient also nur stilistischer Verschönerung oder wie?
Das dient also nur stilistischer Verschönerung oder wie?
nein eben nicht, das dürfte dir nicht kompilieren, wenn A keinen Defaultkonstruktor hat. Außerdem wäre dann a(2) ein Funktionsaufruf der (nicht vorhandenen) Funktion a(int) -- class God : public ChuckNorris { };Dieser Post wurde am 20.02.2009 um 12:09 Uhr von FloSoft editiert.
Damit das kompiliert, muss A sowohl einen Defaultkonstruktor als auch einen operator()(int) haben. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra
Kann man das irgendwo mal nachlesen bzw. gibts da ein Stichwort, mit dem man google bedienen kann und nicht auf jedem 0815 Tutorial landet, was erklärt, was Konstruktoren sind?