C++17 fallthrough属性

在C++17中,引入了[[fallthrough]]属性。这个属性主要用于switch语句中,用于告诉编译器,从上一个case标签到下一个case标签的执行是有意为之的,不应该被诊断为错误。

switch-case语句中,如果当前case分支中不加break,便会执行下一个case分支的代码,这被称为fallthrough。然而,这种fallthrough有时会导致错误。为了防止这种情况,编译器在编译时会检测到fallthrough并发出警告。

但是,如果程序员有意让case分支fallthrough,那么编译器的警告就没有用处。在C++17中,通过使用[[fallthrough]]属性,可以告诉编译器这是有意的fallthrough,从而抑制警告。

这是一个例子:

#include 

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: //编译器可能会警告fallthrough
            std::cout << "case 4\\n";
            //[[fallthrough]]; //不能在最后一个case中使用,会导致编译错误
    }

    return 0;
}

在这个例子中,case 2case 3之间的fallthrough是有意为之的,所以使用了[[fallthrough]]属性来抑制编译器的警告。

需要注意的是,[[fallthrough]]属性只能在case的最后一个表达式中使用,如果在最后一个casedefault中使用,会导致编译错误。此外,C语言中并没有这个属性,这是C++17特有的。

你可能感兴趣的:(我的博客,c++)