共用方式為


__restrict

就如同 restrict __declspec 修飾詞一樣,__restrict 關鍵字會指出符號在目前範圍中沒有別名。 __restrict 關鍵字與 restrict __declspec 修飾詞具有下列差異:

  • __restrict 關鍵字只對變數有效,而 __declspec(restrict) 只對函式宣告和定義有效。

  • 使用 __restrict 時,編譯器將不會傳播變數的無別名屬性。 也就是說,如果您將 __restrict 變數指派至非 __restrict 變數,編譯器將不會表示非 __restrict 變數沒有別名。 這種行為與 C99 規格中 restrict 關鍵字的行為不同。

一般而言,如果您要影響整個函式的行為,使用 __declspec 的效果會比使用關鍵字更好。

__restrict 類似於 C99 規格中的 restrict,不過 __restrict 可以在 C++ 或 C 程式中使用。

C++ 參考上不支援 __restrict。 

注意事項注意事項

若是在同時擁有 volatile (C++) 關鍵字的變數上使用,則 volatile 的優先順序較高。

範例

// __restrict_keyword.c
// compile with: /LD
// In the following function, declare a and b as disjoint arrays
// but do not have same assurance for c and d.
void sum2(int n, int * __restrict a, int * __restrict b, 
          int * c, int * d) {
   int i;
   for (i = 0; i < n; i++) {
      a[i] = b[i] + c[i];
      c[i] = b[i] + d[i];
    }
}

// By marking union members as __restrict, tell compiler that
// only z.x or z.y will be accessed in any given scope.
union z {
   int * __restrict x;
   double * __restrict y;
};

請參閱

參考

C++ 關鍵字