問題タブ [constant-expression]
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.
c++ - C++11 より前の「定数式」
このconstexpr
キーワードは C++11 で導入されました。これは、(私が思うに) 「定数式」の対応する考え方だったからです。ただし、配列宣言には定数式が必要なため、この概念は C++98/c++03 に暗黙的に存在していました。
他の「定数式」、つまり、コンパイル時に評価できる (および/または評価する必要がある) 式があります。その一例がテンプレート引数です。
C++11 より前の場合、C++98/03 標準または他の場所に次のものが存在しますか?
- 定数式を必要とする構文構造の完全なリスト (配列宣言やテンプレートのインスタンス化など)
- そのような定数式を管理する規則 (おそらくこれは、上記のリストの項目から標準の定義へのマッピングにすぎません)
c - #if と #elif の式で、名前の「定義済み」接頭辞とは何ですか?また、C キーワードを含む識別子が 0 に置き換えられるのは何ですか?
頭を抱え込もうとしたが諦めた。Mike Banahan による C の本(セクション 7.3.7 条件付きコンパイル)から引用した以下の説明をお願いします。何度やっても「構成するトークン列……」以降の部分が掴めない。簡単な言葉で教えてください
1)「定義された」接頭辞とは正確には何ですか、そして
2) 名前や C のキーワードでさえもゼロになる (sizeof への紛らわしい参照を忘れないでください) とは?
少しのコードでの説明は非常に役に立ちます。ありがとうございました。
#if および #elif コンストラクトは、単一の整数定数式を引数として取ります。プリプロセッサの整数定数式は、キャスト演算子を含めてはならないことを除いて、他の整数定数式と同じです。定数式を構成するトークン シーケンスはマクロ置換されます。ただし、defined で始まる名前は展開されません。このコンテキストでは、式defined NAMEまたはdefined ( NAME )は、 NAMEが現在定義されている場合は 1 に評価され、定義されていない場合は 0 に評価されます。C キーワードを含む、式内のその他の識別子値 0 に置き換えられます。次に、式が評価されます。キーワードを置き換えることは、これらの式で sizeof を使用して、通常期待する結果を得ることができないことを意味します。
c - const 変数は定数式で使用できませんか?
Visual Studio 2013 Ultimate でこの C コードが違法なのはなぜですか?
を与えerror C2057: expected constant expression
ます。
元の質問
私はこれに完全に困惑しています。
関連機能:
エラーメッセージ:error C2057: expected constant expression
オンラインchar resultBufNative[size+1];
私にとって、それは関連するコードを次のようにします:
どうやら、const size_t + 1
は定数式ではありません。
定義やマクロはありませんsize
(xyzabcに置き換えると同じエラーが発生します)。IDE(Visual Studio Ultimate 2013)でマウスオーバーしたときsize_t
と定義されています。typedef unsigned int __w64 size_t
size_t
C2057 予期される定数式エラーの後、コンパイラはさらに 2 つのエラーを返します。
同じコード行。当然、これらは何が何だかわからないsize + 1
ので0になります。
使用する
を与えerror C2065: 'constexpr' : undeclared identifier
ます。
使用する
を与えerror C2057: expected constant expression
ます。
使用する
を与えerror C2057: expected constant expression
ます。
使用する
を与えerror C2057: expected constant expression
ます。
私がやりたいことはサポートされていないと思います。
c++ - 変数を使用した配列の作成
次のコードがあります。
私は得る
エラー C2057: 定数式が必要です
ベクトルや動的に割り当てられた配列を使用せずに、コードに示されているようなマトリックスを作成するにはどうすればよいですか?
c++ - N4140 の箇条書き §5.19/2.3 の「未定義」という言葉は何を意味しますか?
N4140 §5.19/2.3から(強調鉱山)
—未定義の constexpr 関数または 未定義のconstexpr コンストラクターの呼び出し。
§7.1.5/2 以降、constexpr 関数とコンストラクターは暗黙的にインライン化されます。つまり、constexpr 関数が TU で定義されていない場合、コードはコンパイルされません。
f# - f# のパラメーター化されたテスト - これは有効な定数式ではありません
なんらかの理由で、属性を介してテストに引数を渡すとTestCase
、最初の引数 (この場合は配列) に関する次のエラー メッセージが表示されます。
これは有効な定数式またはカスタム属性値ではありません
しかし、属性とメソッド自体の両方から最後の引数を削除すると、すべて正常に機能します。
私は何を間違っていますか?できればタプルも定義したいのですint * int
が、どちらもうまくいかないようです。