Nach meinem Verständnis von C++ ist der folgende Code fehlerhaft.Warum funktioniert das Aufrufen eines Members so, als wäre es statisch (wenn nicht) in C++?
#include <iostream>
class Test {
private:
int num_;
public:
Test(int n) : num_(n) {}
void printNum() { std::cout << num_ << '\n'; }
void weird() { Test::printNum(); }
};
int main() {
Test t(10);
t.weird();
return 0;
}
Test::weird()
Anrufe Test::printNum()
als wäre es eine statische Member-Funktion. Test::printNum()
greift jedoch auf ein Instanzattribut zu und ist eindeutig nicht statisch. Der Code wird kompiliert und ausgeführt, um 10
auszugeben.
Mein Compiler Apple LLVM Version 7.0.0 (klirren-700.1.76)
Was bin ich?
In diesem Kontext fungiert der Klassennamen-Qualifier als Disambiguator und ist vollkommen legal und in einigen Fällen (z. B. Vererbung) muss unterschieden werden, welche von mehreren ähnlich benannten Funktionen aufgerufen wird. – Galik
@Galik: Bitte beantworten Sie keine Fragen im Kommentarbereich, der zur Klärung dient. –
_ "ist eindeutig keine Klassenmethode" _ Vielleicht ist es nur, dass Ihre Terminologie aus ist, aber es ist definitiv eine "Methode" aka Mitgliedsfunktion. –