wap静态模板青岛网站快速排名优化
在C++17中,引入了[[fallthrough]]
属性。这个属性主要用于switch
语句中,用于告诉编译器,从上一个case
标签到下一个case
标签的执行是有意为之的,不应该被诊断为错误。
在switch-case
语句中,如果当前case
分支中不加break
,便会执行下一个case
分支的代码,这被称为fallthrough
。然而,这种fallthrough
有时会导致错误。为了防止这种情况,编译器在编译时会检测到fallthrough
并发出警告。
但是,如果程序员有意让case
分支fallthrough
,那么编译器的警告就没有用处。在C++17中,通过使用[[fallthrough]]
属性,可以告诉编译器这是有意的fallthrough
,从而抑制警告。
这是一个例子:
#include <iostream>int main(void)
{int n = 3;switch (n) {case 1:case 2: //如果case之间没有语句,fallthrough不会被警告std::cout << "case 2\\n";[[fallthrough]];case 3: //由于有[[fallthrough]]属性,fallthrough警告被禁用std::cout << "case 3\\n";case 4: //编译器可能会警告fallthroughstd::cout << "case 4\\n";//[[fallthrough]]; //不能在最后一个case中使用,会导致编译错误}return 0;
}
在这个例子中,case 2
和case 3
之间的fallthrough
是有意为之的,所以使用了[[fallthrough]]
属性来抑制编译器的警告。
需要注意的是,[[fallthrough]]
属性只能在case
的最后一个表达式中使用,如果在最后一个case
或default
中使用,会导致编译错误。此外,C语言中并没有这个属性,这是C++17特有的。