Fehler, Irrtümer, Fragen - Seite 1730
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Das ist richtig, hier in der Schreibweise, T = A *
Dann gibt es hier einen Kompilierungsfehler
Ganz genau. Ich habe all diese Behauptungen gelesen und kann immer noch nicht verstehen, wo das Problem liegt. Werden Sie diese Dateien auf einer Diskette speichern?
Nutzt es Ihre Festplatte ab, wenn Sie eine 100K-Datei anstelle einer 50K-Datei speichern? (Finden Sie das nicht komisch? )
Und ist es normal, dass wegen eines einzigen Copyright-Zeichens (das im Prinzip international ist und in allen Kodierungen vorkommt, auch wenn sein Code größer als 127 ist) die Dateigröße ohne jeden Sinn verdoppelt wird? Ist das nicht clever? Warum Dateien ohne Not um das 2fache aufblähen?
Nicht nur die Größe ist das Problem, sondern auch die kontextbezogene Suche. Solange die Dateien im ASCII-Format vorliegen, können Sie viele Programme von Drittanbietern, darunter auch Dateimanager, verwenden, um anhand der Kontextzeichenfolge nach Dateien zu suchen. Ich benutze es fast jeden Tag. Der systemeigene MQ-Editor ist in dieser Hinsicht genauso unzureichend wie in vielen anderen offensichtlichen Codierungsfragen. Sobald wir Unicode haben, hat die Kontextsuche zwei Probleme: nicht alle Programme können oder wollen dies tun, und für diejenigen, die es können, ergibt sich Punkt 2 - Langsamkeit.
Natürlich ist es für manche Menschen einfacher, zusätzlich zur Festplatte einen schnelleren Computer zu kaufen, als sich Gedanken darüber zu machen oder zumindest von anderen Produkten zu lernen, wie benutzerfreundlich und effizient Software sein sollte.
Dann gibt es hier einen Kompilierungsfehler
Auch in C++ gibt es eine Zweideutigkeit des Typs: const T const
Aber es gibt einen Ausweg - die Konstante nach rechts verschieben
void f1( T const & a[] ) {} //error: 'const' - unexpected token
class A {};
void f2( A const * const & a[] ) {} //нормально
class B {
void g1() const { f1( a ); } //error: 'f1' - cannot to apply function template
void g2() const { f2( a ); } //нормально
A *a[];
};
Auch in C++ gibt es eine Zweideutigkeit des Typs: const T const
Aber es gibt einen Ausweg - die Konstante nach rechts verschieben
C++ kompiliert ohne Fehler (angesichts des Syntaxunterschieds)Aber logisch gesehen ist es seltsam, wenn "const A" und "A const" das Gleiche bedeuten.
Vielleicht ist"Aconst*" ein konstanter Zeiger auf ein Nicht-Konst-Objekt.
Dies scheint der Fall zu sein. Weil ein solches Konstrukt existiert.
void f( const A const * const & a[] ) {}
Sie können den Zeiger nicht ändern, Sie können nicht per Verweis ändern und Sie können nicht das/die Objekt(e) ändern.
Könnte ein solches Konstrukt dem Compiler unter dem Gesichtspunkt, schnellen Code zu erhalten, einen geeigneten Hinweis geben?
Ist es normal, dass ein einziges Copyright-Zeichen (das im Prinzip international ist und in allen Kodierungen vorkommt, obwohl sein Code größer als 127 ist) dazu führt, dass sich die Dateigröße um das Zweifache erhöht...
void f( const A const * & a[] ) {}
Sie können die Elemente nicht ändern, aber Sie können die Größe des Arrays ändern.
Lustig ist, dass die Methoden wie folgt aussehen können
class B
{
const A const * Method( const A const * const & a[] ) const
{
return(a[0]);
}
};
Es ist möglich, dass"Aconst*" ein Zeiger auf eine Konstante und nicht auf ein konstantes Objekt ist.
Wenn es sich nicht um ein Muster handelt, ist "A const *" gleich "const A *", und wenn es sich um ein Muster handelt, dann durch die Situation
{
public:
int i;
};
void f( A const * & a[] )
{
a[0].i = 1; // 'i' - constant cannot be modified
}
Speziell dies - in Zukunft behoben https://www.mql5.com/ru/forum/1111/page1749#comment_2892563
Wenn es sich nicht um ein Muster handelt, ist "A const *" gleich "const A *", und wenn es sich um ein Muster handelt - in diesem Fall (in C++ )
Es ist interessant, dass bei einem Entwurf wie diesem...
void f( const A const * & a[] ) {}
Elemente können nicht geändert werden, aber die Größe des Arrays kann geändert werden.