我沒有原始的C99(即ISO9899:1999)文本;我只有ISO9899:2007:TC3的副本。我期望從該文件的第111頁獲得的這段文字與C99標準中的文本非常相似。
6.7.3.1 Formal definition of restrict
...
10. EXAMPLE 3
The function parameter declarations
void h(int n, int * restrict p, int * restrict q, int * restrict r)
{
int i;
for (i = 0; i < n; i++)
p[i] = q[i] + r[i];
}
illustrate how an unmodified object can be aliased through two restricted
pointers. In particular, if a and b are disjoint arrays, a call of the form
h(100, a, b, b) has defined behavior, because array b is not modified within
function h.
這似乎明確地提出了您詢問的具有已定義行爲的表單的函數,前提是別名指針用於只讀訪問。通過任何一個別名指針進行寫操作都會調用未定義的行爲。
我沒有標準引用,但我必須想象它是未定義的行爲。你明確地告訴編譯器沒有其他指針指向相同的內存位置,然後違反該提示。我不認爲'const'會影響這個。 –
自相矛盾:如果'dot_product'是點積的通常定義,那麼我認爲它不會*重要*。也就是說,如果只對指針執行讀取操作,違反'restrict'應該無關緊要。只有當你寫信時,我纔會期望發生問題。 –
我應該刪除「編輯」?看起來多餘。我很震驚** **兩個人誤解了我的問題。 – MaxB