标题说明了一切。我很好奇为什么restrict关键字不是C ++的一部分?我对C ++知之甚少,而且我仍然无法在网上找到任何可以阻止这种情况的理由。有没有人知道会发生什么可怕的事情,如果C ++标准会像C一样使用这个关键字?是不是根本不需要?
更多解释:这不是关于使用它,也许在我的一生中我不会从这个关键字中获益。这个问题只是关于好奇心,因为自C99以来,限制是C的一部分,即15年。
阅读此内容: 我对技术原因感兴趣,而不是像#34;他们只是不喜欢这样的意见,它不够酷"
答案 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++
但这仍然相当遥远。