問題タブ [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.

0 投票する
3 に答える
536 参照

c++ - C ++で異種の不変オブジェクトの不変グラフを効率的に実装する方法は?

好奇心から、プログラミング言語のテキストパーサーを書いています。トークンの不変 (実行時) グラフを頂点/ノードとして定義したいとします。これらは当然、タイプが異なります。一部のトークンはキーワードであり、一部は識別子などです。ただし、それらはすべて、グラフ内の各トークンが別のトークンを指すという共通の特性を共有しています。このプロパティにより、パーサーは特定のトークンの後に何が続くかを知ることができます。したがって、グラフは言語の正式な文法を定義します。私の問題は、数年前に C++ を日常的に使用するのをやめ、それ以来、多くの高水準言語を使用しており、ヒープ割り当て、スタック割り当てなどに関して頭が完全に断片化されていることです。残念ながら、私の C++ は錆びています。

それでも、急な坂をすぐに登って、このグラフをこの命令型言語で最もパフォーマンスの高い方法で定義するという目標を設定したいと思います。たとえば、「new」を使用して各トークン オブジェクトをヒープに個別に割り当てることは避けたいと考えています。これは、これらのトークンのグラフ全体をいわば背中合わせに (配列内の要素のように線形に) 割り当てると考えるからです。これは、参照原則の局所性ごとに、何らかの形でパフォーマンスに利益をもたらします-すべてのトークンオブジェクトをランダムな場所に配置するのではなく、グラフ全体がメモリ内の「行」に沿って最小限のスペースを占有するように圧縮される場合、それはプラスですか? とにかく、ご覧のとおり、これは非常にオープンな質問です。

当面の質問は、このグラフ オブジェクトを作成する手順はどのようなものかということです。それは不変であり、コンパイル時に構造が既知であると考えられているため、値によるコピーなどを避けることができ、回避したいのです-このグラフをリテラルから構成することは可能ですか? ここで意味を成していることを願っています... (理解できなかったのはこれが初めてではありません。) グラフは、実行時にコンパイラの一部としてパーサーによって使用されます。これが C++ であるという理由だけで、C ソリューションにも満足できます。事前にどうもありがとうございました。

0 投票する
4 に答える
2193 参照

java - 静的データ構造

コンパイル時に Map または Set 型のデータ構造を作成する方法はありますか?

私がこれを尋ねる理由は、私は App Engine で作業しており、並べ替えと検索が必要なデータ構造がいくつかあるためですが、それらは一定であるため、開始時にそれらを作成する時間コストを避けたいと考えています-上。

0 投票する
3 に答える
162 参照

visual-c++ - これはVC++2010のバグですか?ヘッダーで定数オブジェクトを宣言することについて

数行のコードは1000語の価値があります。

私は3つの単純なファイルを持っています:header.h、main.cpp、other.cpp

最も単純なプロジェクトをコンパイルするとき、VC++2010は次のように文句を言います。

次の2つの参照があるため、これはVC++2010のバグであると確信しています。

  1. C ++標準によると:(n3126の140ページ)

    「constと宣言され、externと明示的に宣言されていないオブジェクトには、内部リンクがあります。」

  2. MSDNによると

    「Cでは、定数値はデフォルトで外部リンケージに設定されるため、ソースファイルにのみ表示されます。C++では、定数値はデフォルトで内部リンケージに設定されるため、ヘッダーファイルに表示されます。

    constキーワードは、ポインタ宣言でも使用できます。」

0 投票する
3 に答える
1718 参照

c++ - 定数式としての C++ クラス/構造体データ メンバ オフセット

データ メンバーのオフセットは、次のように簡単に取得できます。

これをコンパイル時の定数式にしたい (または型特性を使用したい)。たとえば、メンバー オフセットを使用して SFINAE ベースのソリューションを実装するために使用するには、静的アサーションなどを使用します。

更新:問題は、コンパイル時の式にする方法です。POD 型で動作するかどうか、または C ライブラリなどに標準マクロがあるかどうかではありません。

0 投票する
5 に答える
52134 参照

c# - C#で定数Guidを宣言するには?

C#で定数Guidを宣言することは可能ですか?

を宣言できることは理解していstatic readonly Guidますが、記述できる構文はありますconst Guidか?

0 投票する
2 に答える
4761 参照

java - Java定数をゼロで割ってもコンパイル時エラーが発生しないのはなぜですか?

重複の可能性:
1/0 は有効な Java 式ですか?

このコードがコンパイルされるのはなぜですか?

コンパイルされたクラス ファイルを見ると、B が 30 に評価され、A がまだ 7/0 であることがわかります。

私がJSLを理解している限り、ゼロで割る式は定数ではありません。

参照: JLS 15.28

私の上記の声明は、次の行によるものです。

コンパイル時の定数式は、プリミティブ型の値を表す式です

したがって、ゼロ除算はプリミティブ値に評価されません。

私が本当に理解していないのは、コンパイラがとにかくこれを許可する理由です? 明確にするために、上記のコードは「java.lang.ExceptionInInitializerError」でランタイムをクラッシュさせます

私のように、コンパイラは最終的な静的変数を定数として脅し、コンパイル時間を評価します。これは、コンパイラが既に A を評価しようとしたことを意味しますが、それはゼロによる除算であるため、そのまま通過させました。コンパイル時エラーなし。しかし、これは非常に奇妙に思えます...コンパイラは、それがゼロ除算であり、ランタイムがクラッシュすることを認識していますが、それでもコンパイルエラーにフラグを立てません!

誰かが私に理由を説明できますか?

0 投票する
3 に答える
2405 参照

c++ - コンパイル時定数配列をどこに置くか?

次のように、最初の 10 個の素数を格納する配列があるとします。

1 つの .cpp ファイルがある限り、これはすべて非常に問題なくシンプルです。ただし、複数の .cpp ファイルがある場合、この配列をどこに配置すればよいかわかりません。

明らかな解決策は次のとおりです。

ただし、これの問題は、素数配列がコンパイル時の定数ではなくなったことです。x.cpp が素数 [k] を含むいくつかの重い計算を実行したいとします。コンパイル時定数は ka で、実際のメモリ ルックアップを実行する必要があります。私はそれが好きではありません。

では、次のようにこの配列をどこに配置すればよいでしょうか。

  1. バイナリで 1 回だけです (.cpp ファイルごとに 1 回ではありません)。
  2. array[SOME_CONSTANT] もコンパイル時の定数です

編集

これはどう?


PS:上記の「明白な解決策」でさえ、書くのにかなりの時間がかかりました。どうやら const 変数にはデフォルトで内部リンクがあるようです。そのため、「extern」を primes.cpp ファイルに追加して機能させる必要がありました。

0 投票する
1 に答える
2877 参照

c++ - Visual C++ でコンパイル中にコンパイル時の数値定数を出力するにはどうすればよいですか?

Visual C++ には、文字列をコンパイラ出力に出力する#pragma message機能があります。今、私は工場を持っています:

そして、渡されたクラスのサイズを出力したいnew(つまり、コンパイラ出力に。文字列のみを受け入れるsizeof( CComObject<Type> )ように見えます。#pragma message

コンパイル時の数値定数を出力するにはどうすればよいですか?

0 投票する
1 に答える
234 参照

c#-4.0 - カスタム属性がある場合、クラス型に制約を定義する方法は?

特定のカスタム属性がある場合、クラスにインターフェイスを強制的に実装する方法はありますか?

特定の属性を持つクラスが特定のインターフェイスを実装していない場合、コンパイル時エラーが発生するようにします。

myClass が typeof(IMyInterface) でない場合、コンパイル時にエラーが発生します。

ありがとう、