[解決済み] なぜ、requiresは必要なのか?
質問事項
C++20のコンセプトのコーナーの1つに、以下のように書かなければならない状況があります。
requires requires
. 例えば、この例では
[expr.prim.req]/3
:
A requires-expression を使用することもできます。 require-clause(要求節 ([temp]) のようなテンプレート引数に対するアドホックな制約を記述する方法として、以下のようなものがあります。
template<typename T> requires requires (T x) { x + x; } T add(T a, T b) { return a + b; }
最初に必要なのは requires-句 を導入し、2番目は require-expression .
その2つ目の必要な技術的な理由は何でしょうか?
requires
というキーワードがあります。なぜ、書くことを許さないのか。
template<typename T>
requires (T x) { x + x; }
T add(T a, T b) { return a + b; }
<サブ
(注意:文法が違うとは答えないでください。
requires
それ)
解決方法は?
文法上必要だからです。それはそうです。
A
requires
制約は
が必要です。
を使用します。
requires
の式で表されます。多かれ少なかれ任意のブーリアン定数表現を使用することができる。したがって
requires (foo)
は、正規の
requires
の制約を受けます。
A
requires
表現
(あるものがある制約に従うかどうかをテストするもの)は別の構成要素で、同じキーワードで導入されるだけです。
requires (foo f)
は、有効な
requires
の式で表されます。
あなたが望むのは、もしあなたが
requires
を、制約を受け入れる場所で作成することができるようにする必要があります。
requires
節があります。
そこで問題です。
requires (foo)
を requires 制約に適した場所に配置します。パーサーはどこまで進んだら、これが requires 制約であることを認識できるのでしょうか?
制約
制約+式」ではなく、「制約+式」にしたいのですか?
これを考えてみましょう。
void bar() requires (foo)
{
//stuff
}
もし
foo
が型である場合
(foo)
は requires 式のパラメータリストであり、その中のすべては
{}
は関数の本体ではなく、その
requires
の式で表されます。それ以外の場合は
foo
の中の式です。
requires
節があります。
まあ、コンパイラはただ単に何が
foo
が先です。しかし、C++の
本当に
トークンのシーケンスを解析する基本的な行為で、トークンの意味を理解する前に、コンパイラが識別子の意味を理解する必要があるのは嫌なものです。確かに、C++は文脈依存型なので、このようなことは起こります。しかし、委員会は可能な限りこれを避けたいと考えています。
そう、文法なんですね。
関連
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 0.1fを0にすると、なぜ10倍もパフォーマンスが落ちるのですか?
-
[解決済み] C++で仮想関数が必要な理由とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された