C++ 11是否添加了C99限制说明符?如果没有,为什么不呢?

Bil*_*eal 30 c++ c++11 c++-amp

restrict是一个C99功能,它最近得到了很多关注,允许编译器对指针执行"以前只有fortran"的优化.这也是微软最近宣布的与C++ AMP规范基础相同的关键词.

该关键字实际上是在FCD中吗?如果没有,是否有特定原因被省略?

R. *_*des 18

restrictC++ 11 FDIS中唯一提到的是§17.2[library.c]:

许多库函数的描述依赖于C标准库来获取这些函数的签名和语义.在所有这些情况下,restrict应省略对限定符的任何使用.

所以restrict不是在C++ 11中.

  • @Chris:我在你提出问题前2分钟回答了你的问题.我们的时间机器似乎一直在运作. (7认同)

Bo *_*son 15

一个论点是C需要的restrict不仅仅是C++,因为许多操作是使用指向原始类型的指针完成的,因此C代码比C++ 有更多的别名问题.

别名规则说指向不同类型的指针不能别名,因此如果函数的参数具有不同的类类型,则它们不能重叠.

在C++中,我们还有valarray一系列类,它们应该处理不允许别名的基本类型数组.不是说它用得太多了......

添加另一种方法来解决一些别名问题,显然并没有让委员会充分兴奋.


Joh*_*ohn 14

http://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99/

不仅VC++团队,而且ISO C++标准委员会,分别考虑增加对VC++和ISO C++的限制.虽然它是专门为ISO C++ 11建议的,但它被拒绝了,部分原因是它并不总是很明显它是如何扩展到C++代码的,因为C++是一种更大的语言,有更多选项,我们希望确保该功能在整个语言.


Dar*_*rda 5

不要认为它是在C++ 1x中(不幸的是,时间已经耗尽了0x ......!)但至少msvc和g ++支持它__restrict__restrict__扩展.(我不太使用gcc,我认为这是正确的扩展).

为了正常使用C++,我觉得我们还需要有限的引用,而不仅仅是指针,可能与我的问题C++别名规则一致.不确定这些考虑因素是否可能会阻碍......

  • Nitpick:没有C++ 1x.C++ 0x是C++ 11的工作名称.这个名字没有改变.另外,鉴于我们*可以*在十年结束之前有新标准,C++ 1x*可能*最终成为C++ 11之后的C++的工作名称. (5认同)
  • 笑话是x是十六进制数,所以我们仍然可以;) (3认同)
  • @Darren:据我所知,GCC将接受在C++中使用C99的`restrict`(只要你不做任何事情来阻止它这样做,例如指定`-pedantic`).我相信MSVC++将其实现为[`__restrict`](http://msdn.microsoft.com/en-us/library/5ft82fed.aspx). (2认同)