亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么將未使用的返回值轉換為無效?

為什么將未使用的返回值轉換為無效?

C++ C
富國滬深 2019-07-09 12:37:53
為什么將未使用的返回值轉換為無效?int fn();void whatever(){     (void) fn();}是否有任何理由將一個未使用的回報價值變為無效,還是我認為這完全是浪費時間的想法是正確的?后續行動:看來很全面。我認為它比注釋一個未使用的返回值更好,因為自記錄代碼比注釋更好。就我個人而言,我會關掉這些警告,因為這是不必要的噪音。如果一只蟲子因為它逃跑了我會吃了我的話.。
查看完整描述

3 回答

?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

很大程度上涵蓋了這樣做的動機,即顯式地向其他“開發人員”表明您知道此函數返回,但您顯式地忽略了它。

這是一種確保在必要時始終處理錯誤代碼的方法。

我認為對于C+來說,這可能是我唯一喜歡使用C風格的轉換的地方,因為使用完整的靜態轉換表示法在這里感覺有點過火了。最后,如果您正在審查或編寫編碼標準,那么明確聲明對重載運算符的調用(不使用函數調用符號)也是一個好主意:

class A {};A operator+(A const &, A const &);int main () {
  A a;
  a + a;                 // Not a problem
  (void)operator+(a,a);  // Using function call notation - so add the cast.


查看完整回答
反對 回復 2019-07-09
?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

在工作中,我們使用它來確認函數有一個返回值,但是開發人員斷言忽略它是安全的。因為您將這個問題標記為C+,所以您應該使用靜態鑄造:

static_cast<void>(fn());

就編譯器而言,將返回值轉換為空沒有什么意義。


查看完整回答
反對 回復 2019-07-09
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

鑄造到void用于抑制未使用變量和未保存的返回值或表達式的編譯器警告。


“標準”(2003)在第5.2.9/4節中說,


任何表達式都可以顯式轉換為“cvvoid”類型。表達式值是棄置.


所以你可以寫:


//suppressing unused variable warnings

static_cast<void>(unusedVar);

static_cast<const void>(unusedVar);

static_cast<volatile void>(unusedVar);


//suppressing return value warnings

static_cast<void>(fn());

static_cast<const void>(fn());

static_cast<volatile void>(fn());


//suppressing unsaved expressions

static_cast<void>(a + b * 10);

static_cast<const void>( x &&y || z);

static_cast<volatile void>( m | n + fn());

所有表格均有效。我通常把它縮短為:


//suppressing  expressions

(void)(unusedVar);

(void)(fn());

(void)(x &&y || z);

也沒問題。


查看完整回答
反對 回復 2019-07-09
  • 3 回答
  • 0 關注
  • 493 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號