6 27 每日面試題

2021-10-07 16:09:21 字數 2857 閱讀 4618

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 答 從如下幾點...