Zgodnie z moim rozumieniem języka C++ następujący kod jest błędny.Dlaczego wywoływanie funkcji członka działa tak, jakby było statyczne (gdy nie jest) działa w 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()
rozmowy Test::printNum()
gdyż statycznej funkcji składowej. Jednak Test::printNum()
uzyskuje dostęp do atrybutu instancji i wyraźnie nie jest statyczny. Jednak kod kompiluje się i uruchamia, aby wyprowadzić 10
.
Moje kompilator jest jabłko LLVM w wersji 7.0.0 (dzyń-700.1.76)
Czego mi brakuje?
W tym kontekście kwalifikator nazwy klasy działa jak disambiguator i jest całkowicie legalny, aw niektórych przypadkach (np. Dziedziczenia) wymagane jest rozróżnienie, która z kilku podobnych funkcji zostanie wywołana. – Galik
@Galik: Proszę nie odpowiadać na pytania w sekcji komentarzy, która dotyczy prośby o wyjaśnienia. –
_ "z pewnością nie jest metodą klasową" _ Może po prostu Twoja terminologia jest wyłączona, ale z pewnością jest to "metoda" zwana funkcją członka. –