6.27-每日面試題
1、stringstream常見用法介紹
定義了三個類:istringstream、ostringstream 和 stringstream,分別用來進行流的輸入、輸出和輸入輸出操作。本文以 stringstream 為主,介紹流的輸入和輸出操作。
主要用來進行資料型別轉換,由於 使用 string 物件來代替字元陣列(snprintf方式),就避免緩衝區溢位的危險;而且,因為傳入引數和目標物件的型別會被自動推導出來,所以不存在錯誤的格式化符的問題。簡單說,相比c庫的資料型別轉換而言, 更加安全、自動和直接。
2、講一講static_cast和dynamic_cast
派生類不僅有自己的方法和屬性,同時它還包括從父類繼承來的方法和屬性。當我們從派生類向基類轉換時,不管用傳統的c語言還是c++轉換方式都可以百分百轉換成功。但是可怕是向下轉換型別,也就是我們從基類向派生類轉換,當我們採用傳統的c語言和c++轉換時,就會出現意想不到的情況,因為轉換後派生類自己的方法和屬性丟失了,一旦我們去呼叫派生類的方法和屬性那就糟糕了,這就是對類繼承關係和記憶體分配理解不清晰導致的。好在c++增加了static_cast和dynamic_cast運用於繼承關係類間的強制轉化。
1)、使用方式
static_cast< new_type >(expression)
dynamic_cast< new_type >(expression)
2)、static_cast
char a = 'a';
int b = static_cast(a);//正確,將char型資料轉換成int型資料
double *c = new double;
void *d = static_cast(c);//正確,將double指標轉換成void指標
int e = 10;
const int f = static_cast(e);//正確,將int型資料轉換成const int型資料
const int g = 20;
int *h = static_cast(&g);//編譯錯誤,static_cast不能轉換掉g的const屬性
class base
{};class derived : public base
{}base* pb = new base();
if(derived* pd = static_cast(pb))
{}//下行轉換是不安全的(堅決抵制這種方法)
derived* pd = new derived();
if(base* pb = static_cast(pd))
{}//上行轉換是安全的
static_cast相當於傳統的c語言裡的強制轉換,該運算子把expression轉換為new_type型別,用來強迫隱式轉換如non-const物件轉為const物件,編譯時檢查,用於非多型的轉換,可以轉換指標及其他,但沒有執行時型別檢查來保證轉換的安全性。它主要有如下幾種用法:
①用於類層次結構中基類(父類)和派生類(子類)之間指標或引用的轉換。
進行上行轉換(把派生類的指標或引用轉換成基類表示)是安全的;
進行下行轉換(把基類指標或引用轉換成派生類表示)時,由於沒有動態型別檢查,所以是不安全的。
②用於基本資料型別之間的轉換,如把int轉換成char,把int轉換成enum。
③把空指標轉換成目標型別的空指標。
④把任何型別的表示式轉換成void型別。
注意:static_cast不能轉換掉expression的const、volatile、或者__unaligned屬性
3)、dynamic_cast
轉換方式:
dynamic_cast<type* >(e)
type必須是乙個類型別且必須是乙個有效的指標
dynamic_cast<type&>(e)
type必須是乙個類型別且必須是乙個左值
dynamic_cast<type&&>(e)
type必須是乙個類型別且必須是乙個右值
e的型別必須符合以下三個條件中的任何乙個:
1、e的型別是目標型別type的公有派生類
2、e的型別是目標type的共有基類
3、e的型別就是目標type的型別。
在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的;在進行下行轉換時,dynamic_cast具有型別檢查的功能,比static_cast更安全。dynamic_cast是唯一無法由舊式語法執行的動作,也是唯一可能耗費重大執行成本的轉型動作。
//指標型別******************************
if(derived *dp = dynamic_cast(bp))
else
//引用型別******************************
void f(const base &b)
catch(std::bad_cast)
}
static_cast和dynamic_cast詳解 情況
}}
[static_cast和dynamic_cast詳解](
每日面試題8 13
先上題 console.log true false console.log false true false console.log false true false 今天的這一道面試題主要是關於 這個知識點的。要想完全做懂此型別的題目,我們應該需要了解以下幾個點。基本型別的轉化順序。string...
每日面試題 矩陣的螺旋輸出
輸入乙個m n的矩陣,將其螺旋輸出,如下圖 如下 矩陣螺旋輸出 define max 100 int data max max int output int m,int n,int x,int y,int cnt,int total for int i 0 itotal return cnt x y...
前端隨心記 每日面試題8 29
1.給父元素新增宣告 overflow hidden 觸發乙個bfc 缺點 隱藏那個內容之外的元素。2.在浮動元素下方新增空div 並新增宣告 div 缺點 造成 冗餘。3 萬能清除浮動法 選擇符 after 優點 實用簡潔方便。style 第一種 div 第二次 div style 答 從如下幾點...