2010-02-28 25 views
3

我是C++的新手,對C++的轉型有一點理解。我是否認爲(int,double ...)作爲類

據 「C++入門」,老樣式轉換是這樣的:INT(可變)或(INT)可變,和被C引入新++標準包括的static_cast <>,的const_cast <>,的reinterpret_cast < >和dynamic_cast <>。

  1. static_cast <>是否等同於「舊式風格」?我認爲這不是如果我考慮基本數據類型(int,double ...)作爲一個類,那麼它會很方便地使用int(對象)來執行轉換嗎?標準C++是否將基本類型實現爲一個類?

回答

9

1.舊風格的轉換是相當的不同類型轉換:

int i; 
double d = 3.14; 
i = static_cast<double>(d); //(double)d; 
const char* p = reinterpret_cast<char*>(&d); //(char*) &d; 
char* q = const_cast<char*>(p); //(char*) p; 

2.基本數據類型是不是類(例如,你不能從他們那裏繼承),但他們支持的構造函數語法均勻性。

int i(10); //same as int i = 10 

要在基本類型之間進行轉換,您確實可以使用此語法(雖然static_cast更突出)。

+1

只是一個澄清 - 舊風格演員在不同情況下做不同的工作。有時他們翻譯值,有時他們只是用不同的類型重新標記相同的位模式,有時他們只是添加/刪除類型修飾符,如「const」。特別是在模板中,這可能是一個問題,因爲模板程序員需要指定正確的行爲,但不一定知道涉及哪些類型。 C++類型轉換更精確地指定了預期的內容,並且在模板中更不易出現問題。 – Steve314 2010-02-28 12:03:04