C++14 deprecated标记符

前言

在开发库的时候,新版本如果对原来的功能有替代方案,并且你不想让用户使用原来的方法了怎么办?这时我们就可以用到deprecated标记符

deprecated标记符

C++14引入了deprecated标记符,它可以用来标记有此属性的名字或实体被弃用,被弃用了以后你仍然可以使用,但是编译时会报warning。所以你在新版本库中弃用了某个函数,就可以使用deprecated告诉用户尽量不要使用。

语法

其语法如下,第一个只是告诉编译器我们弃用了这个名字,第二个是可以传入一个字面量信息,此信息会在Warning时展示出来:

[[deprecated]]
[[deprecated( "A string" )]]

实例

弃用 class & struct & union & enum

class & struct & union & enum 的弃用属性声明方式如下,都是放在中间:

class [[deprecated]] C{
    
    };
struct [[deprecated]] S{
    
    };
union  [[deprecated]] U{
    
    };
enum [[deprecated]] E{
    
    A};

调用:

int main() {
    
    
    C c;
    S s;
    U u;
    E::A;
}

效果如下:
在这里插入图片描述

弃用别名 typedef & using

声明如下,注意using和typedef声明弃用属性时位置是不一样的

[[deprecated]] typedef wchar_t* WSTR;
using STR [[deprecated]] = char*;

调用:

int main() {
    
    
    WSTR wstr;
    STR str;
}

效果如下:
在这里插入图片描述

变量(包括静态成员和非静态成员)

声明如下,第一个是一个弃用的全局变量,后面的是被弃用的成员。

[[deprecated]] int a;
class C{
    
    
public:
    [[deprecated]] int b;
    [[deprecated]] static int c;
};

调用:

int main() {
    
    
    a;
    C c;
    c.b;
    C::c;
}

效果如下:
在这里插入图片描述

函数

声明如下:

[[deprecated]] void func();

调用:

int main() {
    
    
    func();
}

效果如下:
在这里插入图片描述

命名空间

声明如下:

namespace [[deprecated]] NS{
    
    
    void func();
}

调用:

int main() {
    
    
    NS::func();
}

效果如下:
在这里插入图片描述

枚举项

声明如下,弃用谁在其后面声明。我们这里只弃用了枚举项C,没有弃用AB

enum E{
    
    A,B,C[[deprecated]]};

调用:

int main() {
    
    
    E::A;
    E::C;
}

效果如下:
在这里插入图片描述

带字面量的deprecated属性

声明如下:

[[deprecated("Do not use this")]] void func();

调用:

int main() {
    
    
    func();
}

效果如下,看波浪线处,输出了刚才定义的字面量:
在这里插入图片描述


参考:C++ reference

猜你喜欢

转载自blog.csdn.net/weixin_43130747/article/details/129909902