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
……