对大多数程序员来说,代码陈旧是个大问题。这个新属性提供了解决这个问题的系统方法。
在C++14中,增加关键字:deprecated,主要用于管理过时的函数、接口、类等。
它的用法方便又简单—只需要把[[deprecated]]标签放到声明的前面即可—可以是类,变量,函数,或者其他一些实体的声明。结果看起来像这样:
class
[[
deprecated
]] flaky {
};
当程序中使用了过时的实体时,编译器的反应是把它留给开发人员。显然,大多数人会希望在需要时看到某种形式的警告,同时在不需要时也能够关掉警告。clang3.4中有一个例子,当实例化一个过时的类时给出了警告:
dep.cpp:14:3: warning:
'flaky'
is
deprecated
[-Wdeprecated-declarations]
flaky f;
dep.cpp:3:1: note:
'flaky'
declared here
flaky {
你可能已经注意到,C++的attribute-tokens语法看起来似乎有点不常见。包含[[deprecated]]的属性列表,被放在class,enum等关键字之后,实体名之前。
这个标签具有包括消息参数的另一种形式。同样地,如何处理该消息取决于开发人员。显然,clang3.4直接忽略了该消息。因为,如下代码片段的输出中并不包含错误消息:
class
[[
deprecated
]] flaky {
};
[[
deprecated
(
"Consider using something other than cranky"
)]]
int
cranky()
{
return
0;
}
int
main()
{
flaky f;
return
cranky();
}
dep.cpp:14:10: warning:
'cranky'
is
deprecated
[-Wdeprecated-declarations]
return
cranky();
^
dep.cpp:6:5: note:
'cranky'
declared here
int
cranky()