Heim > Backend-Entwicklung > C++ > Hauptteil

Warum funktioniert das Aufrufen einer Methode über einen Nullzeiger in C manchmal?

Mary-Kate Olsen
Freigeben: 2024-11-01 02:27:27
Original
921 Leute haben es durchsucht

Why Does Invoking a Method Through a Null Pointer in C   Sometimes Work?

Undefiniertes Verhalten verstehen: Aufruf von Nullzeiger-Methoden in C

Trotz der scheinbar intuitiven Erwartung eines Fehlers kann es so aussehen, als ob der Aufruf von Methoden über Nullzeiger in C ausgeführt wird. Dieses Verhalten wirft Fragen hinsichtlich der von Compilern verwendeten Standard-Compliance- und Optimierungspraktiken auf.

Um diese Angelegenheit zu vertiefen, betrachten Sie das folgende Beispiel:

<code class="cpp">#include <iostream>
using namespace std;

class test
{
    int i;
public:
    test():i(0){ cout << "ctor called" << endl;}
    void show()
    {
        cout << "show fun called" << endl;
    }
};

int main(int argc , char *argv[])
{
    test *ptr = NULL;
    ptr->show();
    return 0;
}</code>
Nach dem Login kopieren

In diesem Snippet wird ein Klassentest definiert mit einem Konstruktor und einer show()-Methode. In der main()-Funktion wird ein Zeiger ptr auf NULL initialisiert und dann die show()-Methode über ptr aufgerufen.

Überraschenderweise wird das Programm fehlerfrei ausgeführt und gibt „show fun aufgerufen“ aus, ohne den Konstruktor auszulösen . Dies liegt daran, dass in C der Compiler den Typ des Nullzeigers kennt und so den Code der Methode identifizieren kann. Da die Methode show() den Zeiger this nicht verwendet, wird sie erfolgreich ausgeführt.

Dieses Verhalten gilt jedoch im C-Standard als undefiniert. Compiler dürfen Code optimieren, indem sie vor dem Aufruf einer Methode nicht prüfen, ob ein Zeiger NULL ist. Diese Optimierung verbessert zwar die Effizienz, beeinträchtigt jedoch die Sicherheit und Vorhersehbarkeit.

Das obige ist der detaillierte Inhalt vonWarum funktioniert das Aufrufen einer Methode über einen Nullzeiger in C manchmal?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!