class A {
};
void f1( A* a ) {}
void f2( int a ) {}
voidOnStart()
{
A* const a1 = new A();
f1( a1 ); // ошибка компиляции: constant variable cannot be as reference
constint a2 = 1;
f2( a2 ); //все нормально
}
Wenn ich f1( A* const a ) schreibe, wird alles gut kompiliert, aber ich schreibe nicht f2( const int a ) und im Falle von f2( int a ) bekommt der Compiler es richtig
по сути
f1( A* a ) отличается от f1( A* const a )
тем же, чем
f2( int a ) отличается от f2( const int a )
class A {
};
voidOnStart()
{
const A *a = new A;
delete( a ); //ошибка компиляции: constant cannot be modified
}
Auf den ersten Blick scheint es logisch - delete ruft den Destruktor ~A() auf, und der kann nicht const sein (***)
ABER dann wäre es im Prinzip unmöglich, das Objekt im folgenden Beispiel zu löschen
void f()
{
const A a;
}
weil der Destruktor, der nicht konstant sein kann, beim Verlassen von f() immer noch aufgerufen wird und daher die (***)-Doktrin nicht funktioniert
Außerdem verhindert der C++-Compiler die Funktion delete( a ) nicht, selbst wenn das Argument als const A * deklariert ist (der Destruktor kann nicht als const deklariert werden, da er für beliebige, auch nicht-konstante, Objekte aufgerufen wird)
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Kompilierungsfehler: Der Compiler denkt, ich übergebe einen Zeiger per Referenz
Wenn ich f1( A* const a ) schreibe, wird alles gut kompiliert, aber ich schreibe nicht f2( const int a ) und im Falle von f2( int a ) bekommt der Compiler es richtig
dann sollte auch in f2( a2 ) ein Fehler auftretenIch möchte hier nicht den ganzen Code und das .set dazu posten, aber ich kann es irgendwo hinschicken.
Kann einen const A*-Zeiger nicht löschen
Auf den ersten Blick scheint es logisch - delete ruft den Destruktor ~A() auf, und der kann nicht const sein (***)
ABER dann wäre es im Prinzip unmöglich, das Objekt im folgenden Beispiel zu löschen
void f() { const A a; }weil der Destruktor, der nicht konstant sein kann, beim Verlassen von f() immer noch aufgerufen wird und daher die (***)-Doktrin nicht funktioniert
Außerdem verhindert der C++-Compiler die Funktion delete( a ) nicht, selbst wenn das Argument als const A * deklariert ist (der Destruktor kann nicht als const deklariert werden, da er für beliebige, auch nicht-konstante, Objekte aufgerufen wird)
zählt nicht mehr für Beiträge(
zählt nicht mehr für Beiträge(
Tja.
Ich habe den Beitrag überprüft, er hat sich nicht erhöht. Vielleicht gibt es eine clevere, verbesserte Formel...
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Interessant und humorvoll
newdigital, 2014.04.09 14:23
Das Denken sollte verboten werden - es ist beleidigend!
Die Zeilen sind zu einem Gedicht gestrickt,
Das Meer leckt das trockene Land.
Kinder kacken in das Töpfchen,
♪ Adults poop in their souls ♪
Ich habe meinen Beitrag hier überprüft - er hat sich nicht erhöht. Vielleicht gibt es eine clevere, verbesserte Formel...
Zählen der Bewertungen für Forenbeiträge gestoppt (