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) 
{
    // 无关代码省略
}
posted @ 2021-11-03 00:32  一叶飘落尽知秋  阅读(1027)  评论(0编辑  收藏  举报