Arts - 第003期

For the world you may just be somebody, but for somebody you maybe the world.?????????????????????????????- William Michael Rossetti

Algorithm

之前的兩期直接把原題貼在的這一節(jié),感覺(jué)不太合適,從本期開(kāi)始,決定不再貼原題,給出題目和解答的鏈接。

Questions

Answer

Review

C++ Best Practices
C++ Best Practices 101: A miniQMC Case Study

Tips

避免在switch語(yǔ)句中使用default

我們舉幾個(gè)具體的例子說(shuō)明一下

  • Step one
enum class Values {
  val1,
  val2
};

std::string_view get_name(Values value) {
  switch (value) {
    case val1: return "val1";
    case val2: return "val2";
  }
}

如果你將所有的編譯告警打開(kāi), 你將會(huì)得到這樣的告警,control reaches end of non-void function [-Wreturn-type]。
注:(不同的編譯器告警信息可能不同)

  • Step two
    引入default語(yǔ)句
std::string_view get_name(Values value) {
  switch (value) {
    case val1: return "val1";
    case val2: return "val2";
    default: return "unknown";
  }
}

雖然告警消除了,但是引入了新的問(wèn)題,如下

enum class Values {
  val1,
  val2,
  val3 // added a new value
};
std::string_view get_name(Values value) {
  switch (value) {
    case val1: return "val1";
    case val2: return "val2";
    default: return "unknown";
  }
  // no compiler diagnostic that `val3` is unhandled
}

當(dāng)我們?yōu)槊杜e類Values添加新的枚舉值的時(shí)候,如果我們忘了在處理函數(shù)中添加對(duì)應(yīng)的處理,編譯器也不會(huì)產(chǎn)生任何告警。

  • Step three
    Instead, prefer code like this
std::string_view get_name(Values value) {
  switch (value) {
    case val1: return "val1";
    case val2: return "val2";
  }  // unhandled enum value warning now
  return "unknown";
}

Share

……

Ref

-Wswitch-enum
-Wswitch

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容