Q什么是noalias它去哪了?
A noalias是另一种类型限定符,与const和volatile属于同一语法类别,旨在断言一个对象没有被其他指针指向(“别名化”)。其主要应用场景(也是一个重要的场景)是函数的形式参数,这些函数被设计用于对大型数组执行计算。编译器通常无法利用向量化或其他并行化硬件(如果超级计算机拥有这些硬件)的优势,除非它能确保源数组和目标数组不重叠。
该noalias关键字没有得到任何“先例”的支持,并且是在审查和批准过程的后期才引入的。它在精确定义和连贯解释方面异常困难,引发了广泛且尖锐的辩论,包括丹尼斯·里奇(Dennis Ritchie)的严厉批评。它产生了深远的意义,特别是对几个标准库接口,它们没有显而易见的简单修复方法。
由于批评以及定义noalias良好之处的困难,委员会决定不采纳它,尽管它表面上很吸引人。(在编写标准时,不能半途引入功能;必须理解其完整集成和所有影响。)对并行实现非重叠操作提供显式机制的需求仍然未得到满足(尽管目前正在解决该问题)。
参考文献:ISO Sec. 6.9.6