問題タブ [restrict-qualifier]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
pointers - 制限されたポインターで未定義の可能性がある動作
4 つのコード フラグメントを次に示します。このコードが明確に定義された動作を生成することが保証されている (または保証されていない) のはなぜですか?
制限された「循環参照」:
外側から内側への代入:
関数に渡す:
ポインター演算ループ:
c++ - restrict-pointer-type テンプレート引数と、テンプレート化された基本クラスの仮想メソッドのオーバーライド
以下は、コンパイルしてリンクする必要があると思いますが、そうではありません。
コンパイラ出力:
両方の場所で修飾子を削除する__restrict__
と、コンパイルとリンクが行われます。私は何を間違っていますか?
ノート:
- これは、restrict 修飾子とテンプレートの両方に関する SO (執筆時点) に関する唯一の質問です。おかしいですね。
- でGCC 4.9.3を使用してい
--std=c++11
ます。
c++ - このポインタに制限修飾子を適用する方法
__restrict__
GCC/Clang の修飾子をthis
クラスのポインターに適用するにはどうすればよいですか?
この質問は、Richard Powell の CppCon 2018 講演「How to Argue(ment)」に触発されたものです。同様の質問「restrict qualifier on member functions (restrict this pointer)」を見ました (すべてのコードはCompiler Explorerにあります) 。
上記のコードは、次のアセンブリを生成します。その中で、ポインタvalue
を介して 2 回ロードする必要があることがわかります。this
これは理にかなっています。これは、C から継承された C++ と制限修飾子により、プログラマーが動作をオフにできることの結果です。ポインターのrestrict
機能を有効にする方法が見つかりません。this
コンパイラ エクスプローラーのページで、__restrict__
2 番目のロードを回避するために使用するメソッド引数の例を示します。__restrict__
構造体参照を関数に渡し、使用して 2 番目のロードを省略した例もあります。
this
コンパイラーが、プログラマーがメソッドの引数で暗黙のポインターに言及できるようにする世界を想像できます。コンパイラは、this
ポインターへの修飾子の適用を許可することができます。例については、以下のコードを参照してください。
フォローアップの質問として、C++ 標準または C++ ガイドラインにthis
、restrict 修飾子を決して持たないようにするものはありますか?