Arts - 第003期

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

Algorithm

之前的两期直接把原题贴在的这一节,感觉不太合适,从本期开始,决定不再贴原题,给出题目和解答的链接。

Questions

Answer

Review

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

Tips

避免在switch语句中使用default

我们举几个具体的例子说明一下

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

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

如果你将所有的编译告警打开, 你将会得到这样的告警,control reaches end of non-void function [-Wreturn-type]。
注:(不同的编译器告警信息可能不同)

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

虽然告警消除了,但是引入了新的问题,如下

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
}

当我们为枚举类Values添加新的枚举值的时候,如果我们忘了在处理函数中添加对应的处理,编译器也不会产生任何告警。

  • 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容