生活随笔
收集整理的這篇文章主要介紹了
                                
金山WPS面经 c++开发工程师
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
 
                                
                            
                            
                            - 虛函數的底層實現:虛函數表和虛函數指針
 - 構造函數和析構函數能不能調用虛函數
 
 
	不能https
://blog
.csdn
.net
/u012611878
/article
/details
/78956329
 
 
 static_cast主要用于“低風險”的類型轉換,如整數、浮點數和字符類型的轉換
reinterpret_cast各種不同類型的指針之間、不同類型的引用之間以及指針和能容
納指針的整數之間的轉換
; 卻不保證安全性
const_cast運算符主要是為了去除
const屬性
dynamic_cast專門用于將多態(tài)基類類型的指針強制轉換為派生類類型的指針,而且
能夠檢查轉換的安全性,對于不安全的轉換,返回一個
nullptr
 
 
強制類型轉換具有一定風險,如:把整型轉換為指針類型、將基類
指針轉換為派生類指針、將一種函數指針轉換為另一種函數指針,
將常量指針轉換為非常量指針等。C
++新引用四種強制類型轉換主要是為了
**規(guī)避這種風險
**:a
. 將
int轉換為
double是沒有風險的,而將常量指針轉換為非常量指針,將
int轉換為指針類型都是高風險的,C中并未對這兩種情況作區(qū)分b
. 將多態(tài)的基類指針轉換為派生類指針時并不檢查安全性,無法判斷轉換后的指針是否指向一個派生類對象c
. 如果強制類型轉換出錯,很難排查出錯誤
 
 
在C++中,下面三種對象需要調用拷貝構造函數(有時也稱“復制構造函數”):1) 一個對象作為函數參數,以值傳遞的方式傳入函數體;2) 一個對象作為函數返回值,以值傳遞的方式從函數返回;3) 一個對象用于給另外一個對象進行初始化(常稱為復制初始化);String a("hello"); String b("world"); String c = a;     // 調用了拷貝構造函數,最好寫成 c(a); c = b;               // 調用了賦值構造函數
 
 
	**https://blog.csdn.net/zyq11223/article/details/48766515有時候我們會遇到這樣一種情況,我們用對象a初始化對象b,后對象a我們就不在使用了,但是對象a的空間還在呀(在析構之前),既然拷貝構造函數,實際上就是把a對象的內容復制一份到b中,那么為什么我們不能直接使用a的空間呢?這樣就避免了新的空間的分配,大大降低了構造的成本。這就是移動構造函數設計的初衷。下面這個圖,很好地說明了拷貝構造函數和移動構造函數的區(qū)別。移動構造是一份;拷貝構造是兩份;**
 
IntNum(IntNum 
&& n
):xptr(n
.xptr
){n
.xptr 
= nullptr;  cout
<<"Calling move constructor..."<<endl
;
}
 
                            總結
                            
                                以上是生活随笔為你收集整理的金山WPS面经 c++开发工程师的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。