C++ での restrict キーワードの意味は何ですか?
関数に与えられた2つ以上のポインタが重複していないということですか? 他にどういう意味ですか?
C++ での restrict キーワードの意味は何ですか?
関数に与えられた2つ以上のポインタが重複していないということですか? 他にどういう意味ですか?
Christer Ericson は、彼の論文Memory Optimizationrestrict
の中で、まだ C++ 標準の一部ではありませんが、多くのコンパイラでサポートされており、利用可能な場合は使用することを推奨していると述べています。
キーワードを制限する
! 1999 ANSI/ISO C 標準の新機能
! まだ C++ 標準にはありませんが、多くの C++ コンパイラでサポートされています
! ヒントだけなので、何もしなくても適合している可能性があります
制限修飾されたポインター (または参照)...
! ...基本的には、ポインターのスコープについて、ポインターのターゲットはそのポインター (およびポインターからコピーされたポインター) を介してのみアクセスされるというコンパイラーへの約束です。
それをサポートする C++ コンパイラでは、おそらく C と同じように動作するはずです。
詳細については、この SO 投稿を参照してください: C99 'restrict' キーワードの現実的な使用法?
Ericson の論文を 30 分かけてざっと読むと、興味深く、時間をかける価値があります。
編集
また、IBM のAIX C/C++ コンパイラが__restrict__
キーワードをサポートしていることもわかりました。
次のプログラムがg++できれいにコンパイルされるため、g++もこれをサポートしているようです。
#include <stdio.h>
int foo(int * __restrict__ a, int * __restrict__ b) {
return *a + *b;
}
int main(void) {
int a = 1, b = 1, c;
c = foo(&a, &b);
printf("c == %d\n", c);
return 0;
}
の使用に関する素敵な記事も見つけましたrestrict
:
編集2
C++ プログラムでの restrict の使用について具体的に説明している記事に出くわしました。
Load-hit-stores と __restrict キーワード
また、Microsoft Visual C++も__restrict
キーワードをサポートしています。
何もない。C99標準に追加されました。
一部の C ライブラリのヘッダー ファイルはキーワードを使用するため、C++ 言語はそれについて何かを行う必要があります。少なくとも、キーワードを無視するため、キーワードを抑制するために空のマクロにキーワードを #define する必要はありません。 .
C++ にはそのようなキーワードはありません。C++ キーワードのリストは、C++ 言語標準のセクション 2.11/1 にあります。restrict
は、C++ ではなく、C 言語の C99 バージョンのキーワードです。