2010-11-14 42 views
6

Possible Duplicate:
casting unused return values to voidC++鑄造無效的目的是什麼?

我看了一些源代碼,並在接口類是許多虛擬函數聲明和缺省實現這樣:

virtual bool FunctionName(TypeName* pointer) 
{ 
    (void)pointer; 
    return true; 
} 

請問什麼是鑄造指針的目的在默認實現中失效?

+2

這不應該編譯,因爲函數需要返回一個值。 – 2010-11-14 17:34:32

+1

這被問了無數次。將某些東西轉換爲「void」表示您沒有使用返回值。在你的情況下,這是一個無操作。 – zneak 2010-11-14 17:35:58

+0

@zneak:「指針」不是一個返回值。不是這個問題的一個騙局,儘管我確信這個參數也被覆蓋過。 – 2010-11-14 17:46:44

回答

18

一舉多得取決於你投什麼

  • 標記你打算到這完全是爲寫在無操作的目的是(用於抑制警告,例如)的表達式
  • 標記編譯您有意編譯器和編程器,它的東西,結果被忽略(函數調用的結果,例如)
  • 在一個函數模板,如果返回類型由模板參數類型T給出,並返回了某些函數調用的結果可能與不同在某些情況下。顯式類型轉換到T可能,在void的情況下,防止編譯時錯誤:
    int f() { return 0; } void g() { return (void)f(); }
  • 抑制編譯器選擇一個逗號操作符重載((void)a, b永遠不會調用一個重載逗號操作功能)。

注意,標準保證永遠不會有所謂的,如果你施放一個類對象void一個operator void()(一些版本的GCC忽略規則,雖然)。

12

在這種情況下,它只是避免編譯器關於未使用的參數警告。

+0

+1:爲了給出正確的答案 – 2010-11-14 19:07:58

+0

爲什麼首先要做這樣的參數? – stackptr 2014-03-18 22:58:06

+1

該參數可能發生,因爲其他一些也實現此虛函數的類實際上使用該參數。 – 2014-07-24 11:29:15