38

タイトルがすべてを物語っています。restrict キーワードが C++ の一部ではないのはなぜですか? 私は C++ についてあまり知りませんが、これをブロックする理由をオンラインで見つけることができません。C++ 標準がこのキーワードを C と同じように使用すると、どんな恐ろしいことが起こるか知っている人はいますか? まったく必要ないだけですか?

詳細説明: それを使用することではありません。おそらく、このキーワードから一生何の利益も得られないでしょう。この質問は単なる好奇心に関するものです。restrict は C99 以降、つまり 15 年で C の一部になっているためです。

これも読んでください: 私は技術的な理由に興味があります。

4

2 に答える 2

22

C++ で「restrict」を定義する際にはいくつかの問題があり、そのうちのいくつかは WG ペーパー N3635 にリストされています: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3635.pdf " C++ の制限のようなセマンティクスに向けて"

C++ での制限に関して考えられる問題は次のとおりです。

  • 「this ポインター」でクラス メンバーと間接参照を制限する
  • 関数、ファンクター、ラムダ、およびテンプレートへの制限修飾子の受け渡し
  • 関数内の制限ポインター値のエスケープ
  • 重複する配列メンバー、ストライド

ドキュメントには、C++ の「制限」サポートが制限されているいくつかの C++ コンパイラもリストされています。

N3635 には、C++ への制限が含まれていないことについての興味深い履歴メモもあります。

Mont Tremblant 会議で C++ に含まれる C99 機能をレビューした時点で、restrict が検討されましたが、紙の提案を待っていましたが、提案はありませんでした....

制限は C99 の機能であり、クラスの抽象化で動作するように設計されたことはなく、ポインターが C++ で一般的ではないことに関係している可能性があります。... C のきめ細かなエイリアシング用に設計されましたが、C++ の型ベースのエイリアシング用には適切に設計されていません

于 2014-03-29T00:07:20.947 に答える
8
于 2016-03-07T19:56:44.987 に答える