c++17的注解
c++17的注解
C++17提供了三个注解,分别是[[fallthrough]], [[nodiscard]]和[[maybe_unused]]
编译器错误1.[[fallthrough]]
⽤于switch-case中,在某个case分⽀执⾏完毕之后,如果没有break语句,则编译器可能会给出⼀个警告。但是有时这是开发者有意为之,为了让编译器明确知道开发者的意图,可以在需要某个case分⽀贯穿的地⽅(上个case没有break语句)显式的设置[[fallthrough]]标记。⽰例如下:
switch (type)
{
case 1:
func1();
// 这个位置缺少break语句,且没有fallthrough标注,可能是⼀个逻辑错误,在编译时编译器可能会给出警
告,以提醒修改
case 2:
func2();
// 这个位置缺少break语句,且有fallthrough标注,是开发者有意为之,在编译时编译器不会给出任何警告
case 3:
func3();
}
2.[[nodiscard]]
⼀般⽤于修饰函数,告诉函数调⽤者必须关注函数的返回值(即不能丢弃该函数的返回值)。如果函数的调⽤者未将该函数的返回值赋值给⼀个变量,则编译器给出⼀个警告。
3.[[unused]]
在通常的情况下,编译器回怼程序代码中未使⽤的函数或者变量给出警告,另⼀些编译器直接不允许通过编译。在C++17之前,为了消除这些未使⽤的变量带来的编译告警或者错误,要么修改编译器的告警选项设置,要么定义⼀个类似于UNREFERENCED_PARAMETER的宏来显式调⽤这些未使⽤的变量⼀次,来消除警告或者错误:
#define UNREFERENCED_PARAMETER(x) x
int add (int a, int b, int c)
{
UNREFERENCED_PARAMETER(a);
UNREFERENCED_PARAMETER(b);
// ⽆关代码省略
}
但是在C++17中,直接使⽤注解的⽅式
int add ([[maybe_unused]]int a, [[maybe_unused]]int b, int c)
{
// ⽆关代码省略
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论