Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » explicit für Fortgeschrittene

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.08.2007, 12:16 Uhr
banshee



hallöchen,

wiedermal drängt sich mir eine Frage im Stile Was-wäre-wenn auf

Ich habe gestern zum ersten mal von der Existenz des explicit Schlüsselworts erfahren und mich würde jetzt mal interessieren, was in folgenden Fällen passiert:

1)


C++:
class A
{
  A(int a = 1, int b = 2, int c = 3);
}

int main()
{
  A a = 3;
}


Wird der Aufruf dann zu a = new A(3, 2, 3) ?

2)


C++:
class A
{
  A(string a = "1", int b = 2, int c = 3);
}

int main()
{
  A a = 3;
}


Wie ist es hier? a = new A("1", 3, 3); ?

3)


C++:
class A
{
  A(int a = 1, int b = 2, int c);
}

int main()
{
  A a = 3;
}


und hier a = new A(1, 2, 3); ?

Ist es eigentlich nicht klüger jeden Konstruktor als explicit zu deklarieren und die bei denen man es nicht braucht eben wegzulassen als andersrum. Mir kommt das irgendwie so vor wie break, was man auch in 99% der Fälle braucht aber doch so implementiert wurde, dass man es immerwieder dazuschreiben muss.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.08.2007, 12:42 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Wenn man insgesamt die Tippfehler usw korrigiert:

zu 1:

ja, man erhält A(3, 2, 3)

zu 2:

kompiliert nicht:


Code:
t.cc:14: Fehler: Umwandlung von »int« in nicht-skalaren Typen »A« angefordert



auch irgendwo logisch.

zu 3:

ebenfalls nicht kompilierbar:


Code:
t.cc:14: Fehler: Umwandlung von »int« in nicht-skalaren Typen »A« angefordert



ebenfalls logisch.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.08.2007, 13:01 Uhr
Kest
saint


Hi!

Beispiel 3:
Es liegt viel mehr an der falschen Positionierung der Default-Parameter.
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.

Dieser Post wurde am 27.08.2007 um 13:04 Uhr von Kest editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.08.2007, 14:34 Uhr
mike
Pinguinhüpfer
(Operator)


Hmm. Wo ist der Zusammenhang int - string - explicit?
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.08.2007, 10:35 Uhr
banshee



Den gibt es wahrscheinlich nicht. Ich wollte nur wissen, für welchen Parameter er dann den übergebenen Wert einsetzt. Offenbar immer für den ersten Parameter. Dann müsste aber doch beim 3. Beispiel ein Fehler kommen, dass nicht genügend Argumente vorhanden sind und kein Konvertierungsfehler oder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.08.2007, 11:13 Uhr
mike
Pinguinhüpfer
(Operator)


Naja. Es gibt ja nicht nur die Anwendung. Prinzipiell geht es drum die automatischen Casts abzudrehen.
Angenommen du hast ne Funktion
ShowChar(char theChar)

Dann kannste das explicit machen um zu vermeiden, dass er "unbewusst" nen integer der Funktion gibt.
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: