問題タブ [compile-time-constant]
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++ - constexpr を使用した基本的なコンパイル時のフォーマット文字列チェック
このプロジェクトでは、printf 互換関数を使用して、外部ログ ファイルにメッセージを追加します。例えば、私たちは書くことができます
の関数宣言は次の__LOG_INFO
ようになります
ここで、C++ 11 constexpr 機能を使用してコンパイル時のフォーマット文字列チェックをいくつか追加したいと考えています。たとえば、フォーマット文字列のパラメーター数を非常に簡単にチェックするには、この関数を使用します。
__LOG_INFO
ここでの問題は、コンパイラが fmt が整数定数ではないと文句を言うため、関数自体の内部に static_assert のようなものを追加できないことです。だから今、私たちはこの醜いマクロソリューションを持っています:
したがって、 を呼び出す代わりに、 を呼び出す__LOG_INFO
必要がありますLOG_INFO
。
上記のマクロを使用する以外に、より良い解決策はありますか?
c++ - 定数を引数としてテンプレート化されたクラスを渡す
私のテンプレートクラスは次のようになります:
非常に単純明快で、テンプレート引数は行列のこのサイズを決定します。サイズは論理的に一定なので、一定になるように実装しました。しかし、 my を受け入れる関数を作成しようとするとmatrix
、次の問題が発生します。
そのように書かれていると、コンパイラはテンプレート引数の欠如を正当に反対します...しかし
このエラーをトリガーします:error: expected a constant of type 'unsigned int', got 'unsigned> int'
matrix
型ではなく定数を期待するので、これも一種の真実です。
これに対処する方法は?私はこの問題に遭遇した最初の人ではないと確信しています.定数パラメータ化されたテンプレートを渡すというこの問題に取り組む最も「標準的な」方法は何ですか?
c++ - C++11 より前の「定数式」
このconstexpr
キーワードは C++11 で導入されました。これは、(私が思うに) 「定数式」の対応する考え方だったからです。ただし、配列宣言には定数式が必要なため、この概念は C++98/c++03 に暗黙的に存在していました。
他の「定数式」、つまり、コンパイル時に評価できる (および/または評価する必要がある) 式があります。その一例がテンプレート引数です。
C++11 より前の場合、C++98/03 標準または他の場所に次のものが存在しますか?
- 定数式を必要とする構文構造の完全なリスト (配列宣言やテンプレートのインスタンス化など)
- そのような定数式を管理する規則 (おそらくこれは、上記のリストの項目から標準の定義へのマッピングにすぎません)
actionscript-3 - エラー 1046: 型が見つからないか、コンパイル時の定数ではありません: プログラム
.as ファイルを Flash プログラムにリンクしようとしています。以下は、私の .as ファイルのコードです。
以下は私のFlashファイルのコードです:
誰かが私が間違っていることを教えてもらえますか? エラー 1046 が発生し続けます。ありがとう!:)
c++ - 古い C++ 実装でコンパイル時にいくつかのコンパイル時定義をチェックする
大規模なレガシー コード ベースで作業しているときに、今日、定義が重複しているのではないかと疑っていましたが、多くのコンパイル時の計算に依存していたため、依存関係は人間には明らかではありませんでした。
コンパイラに話させたsizeof
とき、似たような質問でいくつかのケースを思い出しました。
私は通常、コード (IDE 内) にこのようなアドホックな定式化をいくつか入れてから、[Alt]+[F9] を押します。
...そしてそれは、私のコンパイラ (Borland C++ 5.6.4)typedef
が非リテラル次元の配列を遅延評価するためです:
このようなチェックのための本当に覚えやすい方法はありますか? そして、古い勇敢なコンパイラを責めないでください;-)
c++ - M_PI は宣言されていない識別子としてフラグが立てられました
以下のコードをコンパイルすると、次のエラー メッセージが表示されます。
これは何ですか?
c# - C# で既定のメソッド パラメーターをコンパイル時の定数にする必要があるのはなぜですか
編集 1: 望遠鏡などの代替手段があることは知っていますが、これは純粋に教育的な質問でした。
私はこれが真実であることを知っていますが、なぜそうでなければならないのですか? 次のようなものがあるようです:
コンパイラは、メソッドを次のように変更できます。
なぜそれが機能しないのか、または機能するのか、それは単なる設計上の決定ですか?