Bil*_*eal 30 c++ c++11 c++-amp
restrict
是一个C99功能,它最近得到了很多关注,允许编译器对指针执行"以前只有fortran"的优化.这也是微软最近宣布的与C++ AMP规范基础相同的关键词.
该关键字实际上是在FCD中吗?如果没有,是否有特定原因被省略?
R. *_*des 18
restrict
C++ 11 FDIS中唯一提到的是§17.2[library.c]:
许多库函数的描述依赖于C标准库来获取这些函数的签名和语义.在所有这些情况下,
restrict
应省略对限定符的任何使用.
所以restrict
不是在C++ 11中.
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++是一种更大的语言,有更多选项,我们希望确保该功能在整个语言.
不要认为它是在C++ 1x中(不幸的是,时间已经耗尽了0x ......!)但至少msvc和g ++支持它__restrict
和__restrict__
扩展.(我不太使用gcc,我认为这是正确的扩展).
为了正常使用C++,我觉得我们还需要有限的引用,而不仅仅是指针,可能与我的问题C++别名规则一致.不确定这些考虑因素是否可能会阻碍......