理解未定義的行為:C 中的空指標方法呼叫
在C 中,處理空指標時程式執行可能會發生意外的轉變。這在透過空指標呼叫方法的情況下很明顯,如以下程式碼片段所示:
<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>
意外的是,儘管嘗試存取show() 方法,但構造函數並未被呼叫通過空指針ptr。此行為源自於這樣一個事實:編譯器可以確定空指標的類型,從而允許它識別 show() 方法。由於該方法不使用 this 指針,因此程式碼執行順利。
雖然方便,但 C 標準認為此行為未定義。編譯器可以自由地產生行為不同或使程式崩潰的程式碼。因此,依賴這種行為是不明智的,並且可能會導致不可預測的結果。
因此,避免在 C 中透過空指標呼叫方法至關重要。始終確保指標的正確初始化,以避免未定義的行為並保持程式完整性。
以上是為什麼在 C 中呼叫空指標方法有時會起作用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!