【问题标题】:Where can I find information on the C++ [[deprecated]] attribute在哪里可以找到有关 C++ [[deprecated]] 属性的信息
【发布时间】:2012-06-16 13:35:19
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ c++11 c++14


    【解决方案1】:

    [[deprecated]] 属性已进入 C++14 草案(请参阅the October 2013 draft 的第 7.6.5 节 [dcl.attr.deprecated])。

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

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

    [[deprecated]]
    void foo(int);
    

    可以提供说明名称或实体被弃用的原因的消息:

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

    消息必须是字符串文字。

    【讨论】:

    • 文档草稿的链接会很棒 :-) 编辑:谢谢!
    • 关于属性(以及许多其他 C/C++ 语言和标准库功能)的一个很好的参考是 cppreference.com。对于[[deprecated]],请参阅en.cppreference.com/w/cpp/language/attributes
    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢。关键字不知何故感觉不对,但我不确定,所以我在该页面上使用“Go Up to Keywords”链接表示它是一个关键字。更正。并感谢您的回答。
    • @Nicol:“编译器应该忽略它们不支持的任何属性”。这听起来合乎逻辑,但是我在哪里可以找到标准中的内容?我记得前段时间找过,没用。
    • @Marc : §7/1: “除非另有说明,否则属性声明的含义是实现定义的。”。 §7.6.1/5:“对于未在本国际标准中指定的属性标记,行为是实现定义的。” 假定,不需要。 :-]
    • 我知道这只是一个“谢谢”的评论,但仍然很高兴阅读此功能,因为它在 Java 等其他现代语言中已经存在多年...
    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多