Ich verwende eine C++ - Header nur Klasse in iOS-Entwicklung (Xcode).Header-Implementierung Variable Neudefinition zeigt keinen Fehler
In A.hpp
class A {
public:
A() {
B b;
}
void run() {
b.run();
}
private:
B b;
}
B in einer wissenschaftlichen Rechen Bibliothek definiert ist, und b.run() wird voraussichtlich spürbar Zeit in Anspruch nehmen.
In ViewController.mm (oder als main.cpp betrachten)
A* a = new A(); a->run();
gut funktioniert (normalerweise würde ich einige Fehler für variable Neudefinition erwarten, hier b zweimal definiert), aber braucht mehr als zweimal Zeit als erwartet.
Nach dem Entfernen B b;
in A()
funktioniert alles so, wie es sein sollte.
Ich frage mich, ob der Grund für diese seltsame Sache verursacht durch Aufruf von b.run()
zweimal und Compiler tatsächlich behandeln zwei Definitionen als separate Initialisierung und Anruf auf ihnen separat ausgeführt werden. Aber warum hat der Compiler keinen so schwerwiegenden Fehler gefunden?
Sie sollten überprüfen, wie viel Zeit es dauert, um Objekt der Klasse B zu initialisieren. : run() Methode' – HadeS
Dort gibt es übrigens keine Neudefinition. Diese zwei Variablen sind in verschiedenen Bereichen. – Glapa
Es ist ein schlechter Stil, aber Sie können eine lokale Variable haben, die denselben Namen wie eine Klassenmitgliedsvariable hat - sie sind verschieden, und die lokale Variable ist diejenige, die in der Funktion verwendet wird. Wenn Sie erwarten, dass der Konstruktor für 'A' die Membervariable' b' initialisiert, müssen Sie erneut nachdenken. Es ist spät hier, aber würde 'A(): b() {}' die Arbeit machen, nach der Sie suchen? –