为什么restrict关键字不是C++的一部分?

Gáb*_*lla 27 c++ restrict restrict-qualifier

标题说明了一切.我很好奇为什么restrict关键字不是C++的一部分?我对C++知之甚少,而且我仍然无法在网上找到任何阻止这种情况的理由.有没有人知道会发生什么可怕的事情,如果C++标准会像C一样使用这个关键字?它根本不需要吗?

更多解释:这不是关于使用它,也许在我的一生中我不会从这个关键字中获益.这个问题只是关于好奇心,因为自C99以来,限制是C的一部分,即15年.

阅读本文:我对技术原因感兴趣,而不是像"他们只是不喜欢,它不够酷"这样的意见

osg*_*sgx 15

在C++中定义"限制"有几个问题,其中一些在WG文件N3635中列出:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3635.pdf "迈向C++的类似限制语义"

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

  • 使用"this pointer"限制类成员和间接
  • 将限定符传递给函数,仿函数,lambda和模板
  • 在函数内转义限制指针值
  • 重叠数组成员,大踏步走

Document还列出了几个对C++有"限制"支持的C++编译器.

N3635中还有一个有趣的历史记录,关于不包含对C++的限制:

在Mont Tremblant会议期间审查C99中的C99特征包含时,考虑了限制,但正在等待一份文件提案,尽管没有提出......

Restrict是一个C99特性,从来没有设计用于类抽象,它可能与指针在C++中不常见....它专为C的细粒度混叠而设计,但没有为C++中基于类型的混叠设计

  • 谢谢,这篇论文是我一直在寻找的.我只是不知道我需要谷歌`网站:www.open-std.org/jtc1/sc22/wg21/ restrict`.下次我会知道.. (2认同)
  • "指针在C++中不常见"?我不知道他们有这个想法... :-( (2认同)

ein*_*ica 6

不要贬低 osgx 的回答,但是 - 2014 年 5 月,Finkel、Tong、Carrouth、Nelson Vandevoode 和 Wong 发表了一篇更新的论文 N3998:

面向 C++ 的类似限制的别名语义

以及 2018 年更新的一个:

[[assert: std::disjoint(A,nA, B,nB)]]: 合同断言作为 'restrict' 的另一种拼写

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