不那么新的C++标准学习笔记 logo 不那么新的C++标准学习笔记

编译器支持最低版本要求:

  • GCC: 7
  • MSVC: 19.1
  • Clang: 3.9

提案: P0188R1

C++17之前的标准下,有如下代码:

switch (device.status())
{
case sleep:
   device.wake();
   // fall thru
case ready:
   device.run();
   break;
case bad:
   handle_error();
   break;
}

在C++17时可以这样写:

switch (device.status())
{
case sleep:
   device.wake();
   [[fallthrough]];
case ready:
   device.run();
   break;
case bad:
   handle_error();
   break;
}

区别就是新增的[[fallthrough]]属性。如果这里不写[[fallthrough]],编译也是能通过的,但会报诸如warning: case statement without break之类的警告。C++中switch-case默认是会继续往下走,有的时候程序员可能因为粗心会漏写break,就会导致非预期的运行逻辑,有的语言比如Go则默认会跳出当前case,C++17中新增[[fallthrough]]属性可以提醒程序员这里正常逻辑应该是怎样的。

感觉不错,小额赞助一下!

Hosted by Github Pages, 本站由 @missdeer 创建,由 Jekyll 于 2019-05-07 生成,感谢 CloudCannon 制作的theme: Edition ,感谢 Let's Encrypt 提供免费的SSL证书服务。本站点采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。© 2019