ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4440682
Jetzt (Chat):
16 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-

FAQ - Frequently Asked Questions - Allgemeine Programmierung


Genauere Infos zur impliziten Konvertierung?

Folgender Code kompiliert in C++:
Code:
class c
{
public:
    c(){};
    c(int j){i=j;};
private:
    int i; 
};

int _tmain(int argc, _TCHAR* argv[])
{
    c d(12); //1
    c e;     //2
    e=13;    //3   
    
    return 0;
}


Das Verhalten in der mit //1 markierten Zeile ist gewollt und völlig nachvollziehbar. Das Verhalten in Zeile 3 dagegen mag zunächst etwas unerwartet kommen. Es ist schließlich kein Operator = von c definiert, der einen rechtsseitigen int akzeptiert. Tatsächlich geschieht hier folgendes:

Zeile //2 konstruiert e mit dem - hier leeren - parameterlosen Konstruktor. Zeile //3 erzeugt ein Temporäress Objekt c(13) und weist dieses dem Objekt e zu.


Dieses Verhalten kann verhindert werden, indem
Code:
explicit c(int j)
schreibt. Jetzt kann der Konstruktor nur noch explizit aufgerufen werden und Zeile //3 kompiliert nicht.

Meistens ist das das gewünschte Verhalten.