我可以执行以下操作:
int * __restrict arr = new int [100];
std::fill_n(arr + 50, 50, 1); // the arr + 50 temporary aliases arr??
std::fill_n(&arr[50],50,1); // is this ok? No aliasing?
这可能适用于C标准和几乎每个c ++编译器,但我只熟悉visual C ++。
答案 0 :(得分:1)
根据https://en.wikipedia.org/wiki/Restrict:
它表示指针的生命周期,只有它或一个值 直接从它派生(如指针+ 1)将用于访问 它指向的对象。
arr + 50
没问题,因为它来自arr
,这是一个restrict
指针。