C++新特性:deprecated关键字

对大多数程序员来说,代码陈旧是个大问题。这个新属性提供了解决这个问题的系统方法。

在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()


展开阅读全文

没有更多推荐了,返回首页