explicit ctor
-
Hallo Leute. Bin vorhin in einer vector-Implementierung über einen Konstruktor gestolpert der explicit war. Was bedeutet dies?
-
vector hat einen Konstruktor, der als einziges Argument int (oder lass es size_t sein) nimmt. Dadurch existiert eine implizite Umwandlung von int nach vector, was manchmal überraschende Effekte haben kann, oder bei überladenen Funktionen zu Mehrdeutigkeiten führen kann. Wenn diese Umwandlung nicht beabsichtigt ist, sollte man den Konstruktor explizit machen, was einen dann zwingt, vector<foo>(20) zu schreiben.
Bei Konstruktoren ohne oder mit mehr als 2 (nicht optionalen) Argumenten ist das natürlich nicht notwendig.
-
Das verhindert, dass der Compiler implizit einen Typ in diese Klasse umwandelt:
class foo { public: explicit foo(int x); }; //... foo Objekt(5); // Okay Objekt=5; // Nicht okay
In diesem Fall ist es egal. Doch kann es ohne explicit leicht zu Mehrdeutigkeiten kommen. Vor allem wenn die Klasse noch einen "operator int" definiert.
MfG SideWinder
-
Wieder zu spät
MfG SideWinder
-
SideWinder schrieb:
Das verhindert, dass der Compiler implizit einen Typ in diese Klasse umwandelt:
[cpp]
class foo
{
public:
explicit foo(int x);
};//...
foo Objekt(5); // Okay
Objekt=5; // Nicht okay
[/code]Außerdem verhindert es auch die Copy-Initialisierung. Sprich:
[cpp]
// ohne explicit
foo Objekt = 5; // ok
// mit explicit
foo Objekt = 5; // geht nicht!
[/cpp]@Side
Interessante Namenskonvention die du da verwendest. Irgendwie so, äh, twisted
-
:D, naja ich liebe halt dieses Deunglisch ;).
MfG SideWinder
-
SideWinder schrieb:
:D, naja ich liebe halt dieses Deunglisch ;).
darum ging es doch garnicht.