6

我收到了一个描述C++11 中属性的链接。[[deprecated]]这听起来很方便,我想了解更多关于它的信息——哪些编译器支持它,完整的文档等等。

我花了 20 分钟左右的时间在谷歌上搜索,但除了链接的网站外,我在任何地方都找不到关于此的信息。部分原因是与 C++11 相关的“已弃用”一词的其他用法以及搜索引擎无法识别[[. 我也没有在与各种 SO 答案相关的标准草案中找到这一点。我无法访问完整的付费标准。

有人有关于这个[[deprecated]]属性的更多信息吗?

PS:如果你很好奇,我会用它作为https://stackoverflow.com/a/295229/599884的更好替代品

4

2 回答 2

12

[[deprecated]]属性已进入 C++14 草案(参见2013 年 10 月草案的第 7.6.5 [dcl.attr.deprecated] 节)。

属性标记 deprecated可用于标记仍允许使用但出于某种原因不鼓励使用的名称和实体。

例如,foo不推荐使用以下函数:

[[deprecated]]
void foo(int);

可以提供一条消息来描述名称或实体被弃用的原因:

[[deprecated("Replaced by bar, which has an improved interface")]]
void foo(int);

消息必须是字符串文字。

于 2014-01-17T16:12:48.033 回答
7

首先,里面的东西[[]]不是关键字;它们是属性。

[[deprecated]]其次, C++11 标准没有定义属性。您所指的链接要么错误,要么指的是实现此属性的特定编译器(也许是 C++Builder?)。

属性(通常)是特定于编译器的。像#pragmas 一样,编译器应该忽略它们不支持的任何属性。

于 2012-06-13T14:51:31.250 回答