我可以执行以下操作:
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++ 编译器,但我只熟悉可视化 C++。
我可以执行以下操作:
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++ 编译器,但我只熟悉可视化 C++。
根据https://en.wikipedia.org/wiki/Restrict:
它表示在指针的生命周期内,只有它或直接从它派生的值(例如指针 + 1)将用于访问它指向的对象。
arr + 50
没关系,因为它是从 ed 派生的arr
,它是一个restrict
ed 指针。