C++: 類型轉換 static_const<>

C++: 類型轉換 static_const<>

static_cast <new_type> (expression)

Examples:

int current_dma_viewership = 10; int64 total_dma_concurrent_viewership_;double score = total_dma_concurrent_viewership_ != 0 ? (static_cast<double>(current_dma_viewership) / total_dma_concurrent_viewership_) : 0.0;

for (const int type : config_->types()) { const auto video_type = static_cast<ChannelServiceVideosNominatorConfig::VideoType>(type);Home of IBM product documentation for (const int type : config_->types()) { const auto video_type = static_cast<ChannelServiceVideosNominatorConfig::VideoType>(type);

f(const int64 time_now_secs, const int64 refresh_interval_secs) {size_t offset = util_hash::Hash(item) % static_cast<size_t>(refresh_interval_secs); size_t interval = (static_cast<size_t>(time_now_secs) + offset) / static_cast<size_t>(refresh_interval_secs);}

來源:為什麼需要static_cast強制轉換?

情況1:void指針->其他類型指針

情況2:改變通常的標準轉換

情況3:避免出現可能多種轉換的歧義

它主要有如下幾種用法:

  • 用於類層次結構中基類和子類之間指針或引用的轉換。進行上行轉換(把子類的指針或引用轉換成基類表示)是安全的;進行下行轉換(把基類指針或引用轉換成子類指針或引用)時,由於沒有動態類型檢查,所以是不安全的。
  • 用於基本數據類型之間的轉換,如把int轉換成char,把int轉換成enum。這種轉換的安全性也要開發人員來保證。
  • 把void指針轉換成目標類型的指針(不安全!!)
  • 把任何類型的表達式轉換成void類型。

注意:static_cast不能轉換掉expression的const、volitale、或者__unaligned屬性。

What static_cast is actually doing

float f = 12.3;float* pf = &f;// static cast<>// OK, n = 12int n = static_cast<int>(f);// Error, types pointed to are unrelatedint* pn = static_cast<int*>(pf);// OKvoid* pv = static_cast<void*>(pf);// OK, but *pn2 is rubbishint* pn2 = static_cast<int*>(pv);// reinterpret_cast<>// Error, the compiler know you should// call static_cast<>int i = reinterpret_cast<int>(f);// OK, but *pn is actually rubbish, same as *pn2int* pi = reinterpret_cast<int*>(pf);

In short,static_cast<>will try to convert, e.g., float-to-integer, whilereinterpret_cast<>simply changes the compilers mind to reconsider that object as another type.


推薦閱讀:

假如你可以個人主導 C++,你打算怎樣裁剪、擴充和訂製 C++ 來達到你心中最完美的 C++?
大佬,我代碼哪錯了?
JS中的閉包為何會產生副作用,即閉包只能取得包含函數中任何變數的最後一個值?
為什麼編碼仍然是未來最重要的工作技巧
Pixel Perfect Rotation 效果投票!

TAG:編程語言 | 編程 | CC |