首先看一段**:
#include "stdio.h"
class ctest
~ctest(){}
void fun() };
int main(int argc, char* argv)
這段**,按照最初的想法大部分稍微知道怎麼使用指標的都會認為會出現執行時刻錯誤,因為指標為null。可是無論是在gcc下還是用vc都能夠合法的輸出
i can show
太神奇了。
仔細想想 應該是因為在c++中函式是共有(函式存放在**段 每個物件都可以訪問)的資料是私有的 編譯後函式是作為屬於類的一部分存放在單獨的**段中,換句話說它是屬於類。可能函式呼叫p->fun() 訪問的是fun編譯後存放的位址,而這個位址是合法的 而函式的訪問位址也是屬於類,所以物件構建沒構建並沒有什麼關係。物件的構建僅僅是申請控制項 存放當前類的乙個例項 資料段。
我們不妨可以做個測試,將類改動如下:
class ctest
~ctest(){}
void fun() };
這樣 在執行的時候 就報指標錯誤了。
這是乙個蠻有意思的現象,
1 利用這種現象,我們完全可以設計乙個不包含任何的資料成員類,所有的資料都是通過引數傳遞的方式臨時傳遞進去。這樣我們就可以隨時通過null指標來訪問了、並且也支援public private訪問控制。以此來組織一批函式。
2 null指標的錯誤不能及時的暴露出來,有的時候也是因為我們沒有訪問到物件的資料。
乙個有意思的關於函式指標用在vector裡的模型
根據實習公司專案的需要,我對一小部分 進行了重構,本來以為不算什麼,但在今天的除錯過程中一路遇上了很多坑,且把這些記下來,錄了乙個 的簡單模型 ban.h include iostream include vector include stdlib.h include map using names...
乙個有意思的問題
a b這個表示式如何理解?應該理解成a b還是a b,還是a b呢?應該按第一種方式理解。編譯的過程分為詞法解析和 語法解析兩個階段,在詞法解析階段,編譯器總是從前到後找最長的合法token。把這個表 達式從前到後解析,變數名a是乙個token,a後 面有兩個以上的 號,在c語言中乙個 號是合法的t...
乙個有意思的問題
最近做乙個交通管理系統,其中有個使用者投票功能。設想是直接開發乙個自定義的控制項。完成顯示,投票,ip檢索等全部功能。然而卻遇到乙個有意思的問題。具體來說就說,因為是用radiobuttonlist顯示的資料,在用radiobuttonlist.value捕獲使用者輸入時卻發現取出的索引始終為0.即...