問題タブ [compile-time]
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++ - 型名のtypeidは、C ++でコンパイル時に常に評価されますか?
タイプ名 (つまり、typeid(int)、typeid(std::string)...) を使用すると、コンパイル時に typeid が評価されることを確認したかったのです。
そのために、2 つの typeid 呼び出しの比較をループで繰り返し、最適化を有効にしてコンパイルしました。そうではありません)。
そして、コンパイラがコードを単純化する場合とそうでない場合があるため、奇妙な結果が得られます。私はg ++を使用しています(さまざまな4.xバージョンを試しました)。プログラムは次のとおりです。
この問題が発生する条件は明確ではありませんが、
- 継承が含まれていない場合は問題ありません (常にコンパイル時)
- 比較を 1 回だけ行う場合は問題ありません
- 問題は比較の論理和でのみ発生します。すべての条件は誤りです
typeid がどのように機能するかについて私が得られなかったものがありますか (型名で使用される場合、コンパイル時に常に評価されることになっていますか?)、またはこれは評価または最適化における gcc のバグでしょうか?
コンテキストについては、この非常に単純化された例に問題を突き止めましたが、私の目標はテンプレート型で typeid を使用することです (部分的な関数テンプレートの特殊化は不可能であるため)。
ご協力いただきありがとうございます!
for-loop - for ループの条件に関するベスト プラクティス
この場合、何がベストプラクティスと見なされますか?
また
特定の方向から反復するのではなく、配列の裸の長さにわたって反復したくないと仮定します。また、ループ本体で配列のサイズを変更する予定はありません。
それで、array.length()
コンパイル中に定数になりますか?そうでない場合は、2番目のアプローチを選択する必要があります..
c# - ディレクティブを使用して整理し、テストを再実行しますか?
コミットを行う前に、C# ソリューションで数百の単体テストをすべて実行することを好みます。実行には数分しかかからないためです。ただし、それらをすべて実行済みで問題がなく、using
ソリューションでディレクティブを整理することにした場合、単体テストを再実行する必要は本当にありますか? ソリューション内のすべてのファイルを調べ、それぞれに対して Visual Studio の「削除と並べ替え」コマンドを実行するマクロがあります。私の理解では、ディレクティブが変更された後もすべてのプロジェクトがビルドされている限り、using
実行時も問題ないはずです。これは正しい考え方ですか?
java - Javaクラスのコンパイルタイムスタンプを取得する
ローカルで実行されているJavaアプリケーションと、アプレットやJNLP Webアプリケーションとして実行されているJavaアプリケーションの両方について、特定のクラスのコンパイルタイムスタンプを確実に決定することは可能ですか?
java - コンパイル時に Java でのログ記録を無効にする
デバッグ目的でログ メッセージを使用して計測したい Java コードがいくつかあります。ただし、最終的な (コンパイルされた) 製品コードには、実行時間が遅くなるため、ログを含めないでください。Javaでコンパイル時にロガーを無効にする方法はありますか?
実行時有効/無効ロガーの log メソッド内のチェックが追加するフットプリントを恐れていません。
ただし、本番コードでは次のようなパラメーターの構築は避けたいと思います。
Sun の Java コンパイラを使用しています。
delphi - Delphi {$IFDEF CONSOLE} 問題
やってみました
beep
実行時にa が聞こえると予想されますが、そうではありません。ただし、次のテストは機能します。
コンパイル時テストが機能しないのはなぜですか? このドキュメントから理解できる限り、それは確かに機能するはずです。
c++ - 動的ハッシュ->クラスタグ
私は持っています:
ハッシュは、自動生成されたヘッダーから取得されます。これらのハッシュは、タグ1、2、3に間接的に関連付けられています。タグは、コンパイル時に生成された単純なIDを介してクラスに関連付けられます。そうGetTag<Class1>()
すれば、Class1のintタグを取得できます。
私の目標は、ハッシュ->タグの関連付けを単純化することです。できれば、これはコンパイル時とO(1)アクセス時に生成される必要があります。この場合のメモリは問題ではありません。サードパーティのソフトウェアを使用できません。
私は以下を試しました:
次のような特定の実装で:
しかし、この種の実装を使用するのは困難です。なぜならuint32 my_hash;
、コンパイラがコンパイル時にどの値を持っているかをコンパイラが判別できないローカル変数がある場合、コンパイラはGetTagByHash()
呼び出しの正しい実装を解決できないからです。
c - Cでの静的アサート
GCCに特に重点を置いて、C(C ++ではなく)でコンパイル時の静的アサーションを実現するための最良の方法は何ですか?
c - コンパイル時に配列の長さを決定する方法は?
GCCでコンパイル時に配列の長さを返すことができるマクロまたはビルトインはありますか?
例えば:
そのために:
Update0
これをC++で行うのは簡単だと指摘するかもしれません。内の数値を返すテンプレートを作成できます[]
。lengthof
Visual C ++コンパイラでマクロ/ビルトインを見つけたことがあると確信していましたがdimof
、もう見つかりません。
c++ - 定数のコンパイル時チェックと変数のアサートを使用する式をC++で作成するにはどうすればよいですか?
セットアップの例を次に示します。マクロまたはテンプレートCHECKEXPR_RETURNVAL(EXPR、VAL)は、VALを返すときにEXPRがTRUEであることを確認します。
これは、次の非常に単純化された例のように、さまざまな場所で役立ちます。
したがって、難しさは次のとおり です。可能であればコンパイル時のチェックを実行し、値がコンパイル時に決定される定数でない場合は、ランタイムチェックを実行します。
基本的に、アイデアは悪いパラメータをできるだけ早くキャッチすることです。コンパイル時に不良パラメータをキャッチできる場合は、実行時に検出するよりも優れています。また、定数初期化子にはコンパイル時バージョンが必要です。
これが、単一バージョンを複数の場所で機能させるための2つの(失敗した)試みです(一定の配列サイズとして、列挙型初期化子として、および変数を持つ関数として)。残念ながら、これらはコンパイル時のみ(一定の初期化子)またはランタイムのみで機能します。両方で機能するバージョンを見つけたいと思います。
残念ながら、どちらのバージョンも3つのケースすべてで機能しません。すべての場合に機能するコード構造はありますか?