【问题标题】:Why is the restrict keyword not part of C++?为什么限制关键字不是 C++ 的一部分?
【发布时间】:2014-05-08 15:10:06
【问题描述】:

标题说明了一切。我很好奇为什么限制关键字不是 C++ 的一部分?我对 C++ 了解不多,而且我仍然无法在网上找到任何可以阻止它的理由。如果 C++ 标准会像 C 那样使用这个关键字,有谁知道会发生什么可怕的事情?是不是根本不需要?

更多解释:这不是关于使用它,也许我这辈子都不会从这个关键字中受益。这个问题只是关于好奇心,因为从 C99 开始,restrict 是 C 的一部分,也就是 15 年。

请阅读以下内容: 我对技术原因感兴趣,而不是像“他们只是不喜欢,这还不够酷”之类的意见

【问题讨论】:

  • 请注意,至少 MSVC、gcc 和 Intel 的编译器支持 c++ 的 restrict(或变体,如 __restrict),所以实际上这没什么大不了的。
  • 这个问题是针对一些不是真正问题的问题征求意见,因此它不适合 Stack Overflow。
  • @Dialectus 这个问题基本上是问技术原因。我不期望像“因为限制是愚蠢的”这样的答案,我想要像“它与这个和那个冲突”这样的答案。我应该根据这个修改问题吗?
  • Buella,您可能对 N3635 open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3635.pdf 和其他谷歌搜索结果感兴趣 "site:www.open-std.org/jtc1/sc22/wg21/restrict"
  • @πάνταῥεῖ en.wikipedia.org/wiki/Restrict

标签: c++ restrict restrict-qualifier


【解决方案1】:

在 C++ 中定义“restrict”有几个问题,其中一些在 WG 论文 N3635 中列出:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3635.pdf“Towards restrict-like semantics for C++”

C++ 中限制的一些可能问题是:

  • 使用“this 指针”限制类成员和间接性
  • 将限制限定符传递到函数、函子、lambda 和模板中
  • 函数内部限制指针值的转义
  • 重叠的数组成员,步幅

文档还列出了几个 C++ 编译器,它们对 C++ 的“限制”支持有限。

在 N3635 中也有关于不包含限制到 C++ 的有趣历史记录:

在 Mont Tremblant 会议期间审查 C++ 中包含的 C99 特性时,限制被考虑,但正在等待纸质提案,尽管没有提出......

Restrict 是 C99 的一项功能,从未设计用于在类抽象中工作,这可能与指针在 C++ 中不常见有关。 ...它是为 C 的细粒度别名而设计的,但不是为 C++ 中基于类型的别名而精心设计的

【讨论】:

  • 谢谢,这篇论文正是我一直在寻找的。我只是不知道我需要谷歌site:www.open-std.org/jtc1/sc22/wg21/ restrict。下次我会知道..
  • “C++ 中不常见的指针”?我想知道他们有这个想法...... :-(
  • 我可以接受这样的想法,即限制只能应用于函数参数指针只能存在于堆栈上并且只能引用标准布局 POD 类型。第一个 ahem 限制是 C++ 的一个新类别,第二个类别(标准布局 POD)通常不会影响使用语言关键字的能力。所以,也许我的想法很糟糕。
【解决方案2】:

不要减损 osgx 的答案,但是 - 从 2014 年 5 月开始,Finkel、Tong、Carrouth、Nelson Vandevoode 和 Wong 有一篇更新的论文 N3998:

Towards restrict-like aliasing semantics for C++

还有一个 2018 年更新的:

[[assert: std::disjoint(A,nA, B,nB)]]: Contract assertions as an alternate spelling of ‘restrict’

(感谢@MCCCS 指出最后一个。)

【讨论】:

    猜你喜欢
    • 2010-10-18
    • 2012-01-15
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 2021-09-20
    • 2013-05-21
    • 2011-11-16
    相关资源
    最近更新 更多