Fehler, Irrtümer, Fragen - Seite 1569

 
Ruslan Khasanov:
Warum erscheint "Müll" bei der Verwendung eines Stylers?
Und warum benutzen Sie es? ))
 

Kompilierungsfehler (Build 1327)

class A { 
public:
        bool operator++( int ) { return false; }
};

void OnStart()
{
        A a;
        while ( a++ ); //'++' - illegal operation use
}
 

Kompilierungsfehler

class A { public:
template<typename T>        void f( T t );
template<typename T> static void g( T t );
}; 
template<typename T> void A::f( T t ) {}
template<typename T> void A::g( T t ) {}

void OnStart()
{
        A a;
        a.f(  1 ); //нормально
        A::g( 1 ); //'g<int>' - access to non-static member or function
}
 

Kompilierungsfehler

class A { public:
        A *operator ++()      { return &this; }
};
template<typename T> void f( T t ) {}
void g( A *a )
{
        f( ++a ); //'A' - declaration without type (1)
        f( a.operator++()); //нормально            (2)
}
Besonderer Hinweis - wenn Sie die Zeilen (1) und (2) vertauschen, ist alles in Ordnung, was eine zusätzliche Überprüfung erfordert
 
A100:

Kompilierungsfehler

Ich möchte besonders darauf hinweisen, dass alles in Ordnung ist, wenn man die Zeilen (1) und (2) vertauscht(!), was eine zusätzliche Überprüfung erfordert
Verstehe ich richtig, dass f(++a) und f(a++) in Ihrem Beispiel unterschiedliche Varianten von f verursachen?
 
Anton Zverev:
Verstehe ich das richtig, dass f(++a) und f(a++) in Ihrer Probe unterschiedliche Varianten von f verursachen?

Nein, es handelt sich um einen Kompilierungsfehler, d.h. es ist noch nicht zur Ausführung gekommen (bestimmte Aufrufe). Die Zeichenfolgen (1) und (2) sind aus der Sicht des Codes gleichwertig (unterschiedliche Schreibweise derselben Sache)

Hier ein weiteres Beispiel, damit nicht der Eindruck entsteht, es ginge nur um den Operator ++

class A { public:
        A *operator <<( int )      { return &this; }
};
template<typename T> void f( T* t ) {}
void g( A* a )
{
        f( a << 1 ); //'A' - declaration without type
}
 
A100:

Die Zeilen (1) und (2) sind vom Code her gleichwertig (unterschiedliche Schreibweise derselben Sache)

++a und a++ sind jedoch von unterschiedlicher Bedeutung. Meinen Sie nicht auch?
 
Anton Zverev:
++a und a++ haben nämlich eine unterschiedliche Bedeutung. Meinen Sie nicht auch?
es gibt kein A++
 

Kompilierungsfehler: Fehler bei der Baumoptimierung

#property library

class A { public:
template<typename T> int f( T a, int b, bool c = false );
};
template<typename T>
int A::f( T a, int b, bool c ) { return 0; }

class B : public A {
        virtual void g();
};
void B::g()
{
        f( 0, 0, false ); //нормально
        f( 0, 0 );        //tree optimization error
}

class C {};
void start( C* ) export {}

Da der"Baumoptimierungsfehler" nicht leicht zu lokalisieren ist, bitte ich die Entwickler (wenn sie diese Möglichkeit haben), alle Optimierungen in den Optimierungsschlüssel zu legen (Gott sei Dank gibt es ihn), da sich sonst selbst bei deaktivierter Optimierung funktionierende Programme nach einem Build-Upgrade als vollständig deaktiviert herausstellen (und es unmöglich ist, zurückzugehen).

Beachten Sie, dass alle heutigen Fehler nicht alt, sondern neu sind - vorher (Build 1241) funktionierte alles
 
A100:
Es gibt kein A++

Richtig. Deshalb habe ich angegeben

Anton Zverev:
Verstehe ich richtig, dass f(++a) und f(a++) in Ihrem Beispiel unterschiedliche Varianten von f verursachen?