212

C++ での restrict キーワードの意味は何ですか?

関数に与えられた2つ以上のポインタが重複していないということですか? 他にどういう意味ですか?

4

7 に答える 7

153

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キーワードをサポートしています。

于 2009-12-27T08:22:11.827 に答える
23

何もない。C99標準に追加されました。

于 2009-04-22T09:01:59.540 に答える
12

これは、このキーワードを追加するための最初の提案です。しかし、熱心に指摘されているように、これはC99の機能です。C++とは何の関係もありません。

于 2009-04-22T09:03:43.140 に答える
4

一部の C ライブラリのヘッダー ファイルはキーワードを使用するため、C++ 言語はそれについて何かを行う必要があります。少なくとも、キーワードを無視するため、キーワードを抑制するために空のマクロにキーワードを #define する必要はありません。 .

于 2009-12-05T17:47:27.817 に答える
4

C++ にはそのようなキーワードはありません。C++ キーワードのリストは、C++ 言語標準のセクション 2.11/1 にあります。restrictは、C++ ではなく、C 言語の C99 バージョンのキーワードです。

于 2009-12-27T10:06:42.440 に答える