Aber Zeile *2* kompiliert und funktioniert einwandfrei. Und warum?
Sie müssen einen klaren Widerspruch aufzeigen (dass Sie den Konstantenwert geändert haben):
int f( int &p ) { return p = !p; }
struct X {
constint i;
X( int i ) : i( i ) {}
X( X& x ) : i( f(x.i) ) {}
};
voidOnStart()
{
X x1( 1 );
constint i = x1.i;
{ X x2 = x1; }
Print( i == x1.i ); //Результат: false - не может быть
}
Und Sie schlagen vor, dass sowohl erfahrene Benutzer als auch Entwickler raten sollten
Meine Idee ist es, mql5 als Forex-Handelssystem zu verwenden, und ich würde es gerne in meiner eigenen Praxis einsetzen.
Ist es möglich, die Felder eines const-Objektseiner Klasse zu ändern oder seine Nicht-const-Methoden aufzurufen? -Sie können!
template <typename T>
T GetMe( const T Ptr )
{
return((T)Ptr);
}
class A
{
public:
int i;
};
voidOnStart()
{
const A a;
GetMe(&a).i = 1;Print(a.i); // 1
}
Ich selbst mag diesen Chip nicht. Ich dachte, ich sei gegen unbefugten Zugriff versichert. Trotzdem schade! Das funktioniert natürlich nicht mit konstanten Strukturen. Behalten Sie dieses Schlupfloch also im Hinterkopf.
mktr8591 #: Ja. Aber in Ihrem Beispiel haben Sie eine explizite (über eine Funktion) Umwandlung von const T in T - also ein "legalisiertes" Schlupfloch.
In b3095 führe ich ein Skript aus:
Wenn Sie die Überladung f1(T* & Ptr) entfernen, geben alle 5 Aufrufe void f1<const X>(const X*const) zurück.
Ist dies eine Art Funktion?
Bitte erläutern Sie dies:
Zeile *1* gibt einen Compilerfehler - erwartet.
Aber Zeile *2* kompiliert und funktioniert einwandfrei. Und warum?
Bitte erläutern Sie dies:
Zeile *1* gibt einen Compilerfehler - erwartet.
Aber Zeile *2* kompiliert und funktioniert einwandfrei. Und warum?
Sie müssen einen klaren Widerspruch aufzeigen (dass Sie den Konstantenwert geändert haben):
Und Sie schlagen vor, dass sowohl erfahrene Benutzer als auch Entwickler raten solltenWertänderung
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Merkmale der Sprache mql5, Feinheiten und Tricks
Meine Idee ist es, mql5 als Forex-Handelssystem zu verwenden, und ich würde es gerne in meiner eigenen Praxis einsetzen.
Ist es möglich, die Felder eines const-Objektseiner Klasse zu ändern oder seine Nicht-const-Methoden aufzurufen? -Sie können!Ich selbst mag diesen Chip nicht. Ich dachte, ich sei gegen unbefugten Zugriff versichert. Trotzdem schade! Das funktioniert natürlich nicht mit konstanten Strukturen. Behalten Sie dieses Schlupfloch also im Hinterkopf.
Sie müssen einen klaren Widerspruch aufzeigen (dass Sie den Wert von const geändert haben):
Und Sie schlagen vor, dass sowohl erfahrene Benutzer als auch Entwickler ratenJa. Aber in Ihrem Beispiel haben Sie eine explizite (über eine Funktion) Umwandlung von const T in T - also ein "legalisiertes" Schlupfloch.
((A*)(&a)).i = 1;ähnlich - (const A*) in A* umwandeln.
((A)a).i = 1;In Ihrem Beispiel wird const explizit in non const umgewandelt, und schon ist es sauber