① c++私有成員函數可以在類外定義嗎
private和public是用來控制對象訪問類的成員的,至於函數在那裡定義則和這個無關。
對象不能訪問類的私有函數。但是私有函數可以在類內或者類外定義,類內定義的函數默認是內聯的,類外定義則是非內聯函數。
② java中方法的內聯是怎麼回事
Java編譯器會對編譯的類進行類繼承關系分析,當確認class A的方法get只有一個版本(不是抽象方法也沒有重寫,我是直接定義final達到此效果),就會進行方法內聯編譯優化。
屬於Java虛擬機的運行優化,System.out.println(i);,應該屬於熱點代碼,虛擬機可能會將這個代碼編譯本地代碼來執行。
③ 類的隱式內聯函數為什麼能夠訪問類的私有變數
成員函數本來就可以訪問私有變數,和他是不是內聯的有什麼關系。
我明白你的意思,但是我想,第一,判斷能否訪問是在編譯階段的語義分析,inline是在生成代碼階段,當然是先語義分析再生成代碼。第二,所謂內聯,只是對生成的代碼的優化,而訪問許可權只是在編譯階段保證你程序的正確。以上只是個人的想法。
④ 內聯成員函數的優缺點【C++】
優點是提高運行時間效率,缺點是增加了空間開銷
對於普通函數,函數調用需要時間和空間開銷,調用函數實際上將程序執行流程轉移到被調函數中,被調函數的代碼執行完後,再返回到調用的地方。這種調用操作要求調用前保護好現場並記憶執行的地址,返回後恢復現場,並按原來保存的地址繼續執行。對於較長的函數這種開銷可以忽略不計,但對於一些函數體代碼很短,又被頻繁調用的函數,就不能忽視這種開銷。引入內聯函數正是為了解決這個問題,提高程序的運行效率。
對於內聯函數,在程序編譯時,編譯器將程序中出現的內聯函數的調用表達式用內聯函數的函數體來進行替換。由於在編譯時將內聯函數體中的代碼替代到程序中,因此會增加目標程序代碼量,進而增加空間開銷,而在時間開銷上不象函數調用時那麼大,可見它是以目標代碼的增加為代價來換取時間的節省。
⑤ java類裡面構造方法私有後,在外部不可以new對象,但是內部可以,這是為什麼
很簡單,你這么去理解,自己私有的東西在自己看來是可見的,所以可以去new,但是在外部看來就不行,因為你沒有暴漏給他,他不知道,你也不想讓他知道,單利模式就是這樣的.有問題可以找我
532500648