Lưu ý
Cần có ủy quyền mới truy nhập được vào trang này. Bạn có thể thử đăng nhập hoặc thay đổi thư mục.
Cần có ủy quyền mới truy nhập được vào trang này. Bạn có thể thử thay đổi thư mục.
Like the __declspec ( restrict ) modifier, the __restrict keyword (two leading underscores '_') indicates that a symbol isn't aliased in the current scope. The __restrict keyword differs from the __declspec (restrict) modifier in the following ways:
The
__restrictkeyword is valid only on variables, and__declspec (restrict)is only valid on function declarations and definitions.__restrictis similar torestrictfor C starting in C99 and available in/std:c11or/std:c17mode, but__restrictcan be used in both C++ and C programs.When
__restrictis used, the compiler won't propagate the no-alias property of a variable. That is, if you assign a__restrictvariable to a non-__restrictvariable, the compiler will still allow the non-__restrict variable to be aliased. This is different from the behavior of the C99 C languagerestrictkeyword.
Generally, if you want to affect the behavior of an entire function, use __declspec (restrict) instead of the keyword.
For compatibility with previous versions, _restrict is a synonym for __restrict unless compiler option /Za (Disable language extensions) is specified.
In Visual Studio 2015 and later, __restrict can be used on C++ references.
Note
When used on a variable that also has the volatile keyword, volatile will take precedence.
Example
// __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;
};