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

时间:2014-03-28 23:34:24

标签: c++ restrict restrict-qualifier

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

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

阅读此内容: 我对技术原因感兴趣,而不是像#34;他们只是不喜欢这样的意见,它不够酷"

2 个答案:

答案 0 :(得分:14)

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

  

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

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

文档还列出了几个限制为"限制"的C ++编译器。支持C ++。

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

  

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

     

Restrict是一个C99功能,从来没有设计用于类抽象,它可能与C ++中不常见的指针有关。 ...它是为C的细粒度别名而设计的,但没有为C ++中基于类型的别名设计得很好

答案 1 :(得分:3)

不要贬低osgx的答案,但是 - 从2014年5月起,有一篇更新的论文,由Finkel,Tong,Carrouth,Nelson Vandevoode和Wong撰写的N3998:

Towards restrict-like aliasing semantics for C++

但这仍然相当遥远。