在C ++中处理指针别名的确切规则是什么?

时间:2016-10-28 11:33:43

标签: c++ pointers language-lawyer strict-aliasing

在C中有SELECT关键字,它告诉编译器函数的指针参数之间没有别名,允许它以这种方式执行一些不允许的优化。例如:

restrict

现在函数体中的指令可以并行执行,因为void add(int* restrict ptrA, int* restrict ptrB, int* restrict val) { *ptrA += *val; *ptrB += *val; } 和某些val参数之间没有别名。在C ++中,没有ptr个关键字。

  1. 在标准定义的C ++中处理指针别名的确切规则是什么?
  2. 哪些流行的编译器扩展在C中提供与restrict类似的语义?例如 MSVC g ++ clang ++ 英特尔C ++编译器
  3. 在未来的C ++标准中是否有任何计划restrict关键字标准化?

0 个答案:

没有答案