Neben der Verwendung eines Debuggers können Sie auch cout
Anweisungen verwenden, um zu verfolgen, wann die Dinge aufgerufen werden.
Um mich Art zu helfen, Ihr Programm, das ich ein wenig von der Vertiefung fixiert Verfolgung und Kommentare hinzugefügt, wann Dinge geschehen:
#include <iostream>
using namespace std;
class A {
public:
A() {
a.a = a.b = 1;
}
struct {
int a,b;
} a;
int b(void);
};
int A::b(void) {
cout << "Within A::b()" << endl;
// swap a.a, a.b
int x=a.a;
a.a=a.b;
a.b=x;
cout << "a.a.a = " << a.a << " a.a.b: " << a.b << endl;
return x;
};
int main(void) {
// sets a.a.a = 1, a.a.b = 1
A a;
// sets a.a.a = 0, a.a.b = 1
a.a.a = 0;
// a.a.a = 1, a.a.b = 0
a.b();
// check output here
cout << a.b() << a.a.b << endl;
return 0;
}
Die obigen Programmergebnisse mit der folgenden Ausgabe auf http://cpp.sh/:
Insgesamt hängt es davon ab, ob ab() oder aab zuerst aufgelöst wird, wenn Sie cout
aufrufen. In diesem Fall ist die Operatorpriorität aufgrund der Funktionsweise von cout
nicht definiert. This stackoverflow post hat einige gute Infos dazu.
Willkommen bei Stack Overflow. Bitte nehmen Sie sich die Zeit, [The Tour] (http://stackoverflow.com/tour) zu lesen und beziehen Sie sich auf das Material aus der [Hilfe] (http://stackoverflow.com/help/asking), was und wie Sie können fragen Sie hier. –
Das richtige Werkzeug, um solche Probleme zu lösen, ist Ihr Debugger. Sie sollten Schritt für Schritt durch Ihren Code * gehen, bevor Sie auf Stack Overflow nachfragen. Für weitere Hilfe lesen Sie bitte [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Zumindest sollten Sie Ihre Frage bearbeiten, um ein [minimales, vollständiges und verifizierbares] (http://stackoverflow.com/help/mcve) Beispiel einzufügen, das Ihr Problem zusammen mit den Beobachtungen, die Sie in der Debugger. –
Vielleicht lesen Sie über [Sequenzpunkte] (https://en.wikipedia.org/wiki/Sequence_point). – paddy