2014-02-17 55 views
1

幾乎What's the difference between function(myVar) and (function)myVar?類型(myVar)和(type)myVar的名稱是什麼?他們都是不好的習慣嗎?

但我想一個翻版知道:

什麼是這些變種的名稱,他們是「壞」?

type(myVar)是類似於語法的構造函數,但是對於基本類型,它和做C風格的C++類型轉換是相同的嗎?

(type)myVar這一個確實看起來是C風格演員,因此一定是壞習慣?

我見過一些例子,其中(int)aint(a)之間的關係表明C風格的版本是壞/錯但是鏈接的問題說它們都是相同的!

+0

「function」是什麼意思? 'int'不是一個函數。另外,你要求什麼名字?返回的對象?語法? – user2357112

+0

語法,我想功能應該是鍵入,我會更新問題 – paulm

回答

3

什麼是這些變異

  • type(expr)被稱爲函數樣式轉換的名稱。
  • (type)(expr)被稱爲C風格演員。

他們是'壞'嗎?

Yes.首先,兩者在語義上完全等價。他們是「壞」,因爲它們不是安全的 - 他們可能是相當於一個static_cast,但同樣一個reinterpret_cast,並在不知道兩者typeexpr,這是不可能的類型說。在某些情況下,它們也忽略訪問說明符(C風格的轉換允許在私有繼承層次結構中進行轉換)。此外,它們並不像明確的C++風格類型那樣繁瑣,這是一件壞事,因爲在C++中投射通常是意味着


考慮int(x):根據x」類型,這可以是一個static_cast(上的體系結構,其中int是大到足以容納一個指針例如auto x = nullptr;)(例如auto x = 4.2f;)或reinterpret_cast

+0

這是否意味着函數式演員是一個C功能? – paulm

+0

你是否說過爲'unsigned char c;'int(c)'做類似於'reinterpret_cast (c)'的效果? –

+0

@paulm不,絕對不是c。 –

相關問題