問題タブ [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.
java - Java定数をゼロで割ってもコンパイル時エラーが発生しないのはなぜですか?
重複の可能性:
1/0 は有効な Java 式ですか?
このコードがコンパイルされるのはなぜですか?
コンパイルされたクラス ファイルを見ると、B が 30 に評価され、A がまだ 7/0 であることがわかります。
私がJSLを理解している限り、ゼロで割る式は定数ではありません。
参照: JLS 15.28
私の上記の声明は、次の行によるものです。
コンパイル時の定数式は、プリミティブ型の値を表す式です
したがって、ゼロ除算はプリミティブ値に評価されません。
私が本当に理解していないのは、コンパイラがとにかくこれを許可する理由です? 明確にするために、上記のコードは「java.lang.ExceptionInInitializerError」でランタイムをクラッシュさせます
私のように、コンパイラは最終的な静的変数を定数として脅し、コンパイル時間を評価します。これは、コンパイラが既に A を評価しようとしたことを意味しますが、それはゼロによる除算であるため、そのまま通過させました。コンパイル時エラーなし。しかし、これは非常に奇妙に思えます...コンパイラは、それがゼロ除算であり、ランタイムがクラッシュすることを認識していますが、それでもコンパイルエラーにフラグを立てません!
誰かが私に理由を説明できますか?
c++ - static const のアドレスが const 式ではありませんか?
次の例のように、address-of-static は定数式でしたが、コンパイラ エラーが発生しました (または、これは C++0x の新機能ですか?)。
c++ - 定数式には表示できません
次のC++プログラムでは:
「doublelog(double)」というエラーメッセージが定数式に表示されません。整数キャストを前に置いたのに、なぜこの問題が発生するのですか?これをどのように修正すればよいですか?
string - TVarRec で文字列 (または AnsiString) 定数を設定する方法は?
Args
フォーマット引数をFormat関数に渡したいと思います。その例をいくつか見つけましたが、 TVarRecメンバーに文字列定数を割り当てる方法がわかりません。次のコードは、 でのコンパイルに失敗しますE2089 Invalid typecast
。
文字列 (または AnsiString) 定数を TVarRec メンバーに設定する方法を教えてもらえますか? Delphi 2009 を使用しています。
どうもありがとう
c# - 文字列値を持つラムダ式 ConstantExpression の作成
プロパティ名、値 (文字列)、およびプロパティ タイプ (Type) を提供するラムダ式を作成したいと考えています。
問題は、Expression.Constant(value1, propertyType);
Foo is string に渡される value1 行にあります。「不明」タイプに解析する必要があります
c++ - 三項演算子のポインター変換の問題
三項演算子には驚くべき制限があることは知っていますが、これがコンパイルに失敗することに少し戸惑いました。
明らかに、それは問題を示すために必要な最小限です。エラーは次のとおりです。
コンパイラは100%未満のEmbarcadero C ++ Builder 2010であるため、コンパイラのバグは不可能ではありません...
注:Parensは、私の意図についての混乱を避けるために変更されました。
注2:そもそもこの構成に到達した方法について少し混乱したので、言い訳をしますa = b? c : d
。b、c、dがすべて複雑な式であるなどの行でコンパイルエラーが発生していました。 。それを絞り込むために、原因が原因であるかどうかを確認するためにc
、とd
をNULL
sに置き換えましb
た。この時点で、すべてが手押し車で地獄に行きました。
c++ - 定数ポインタを定数式にできないのはなぜですか?
次のプログラムがコンパイルされます。
しかし、これはそうではありません。これは私にとって驚きです。
別の例:
ポインタが定数であり、定数式で初期化されているかどうかに関係なく、ポインタを定数式にすることはできないと結論付けました。
質問:
- 私の結論は本当ですか?
- もしそうなら、なぜポインタは定数式になれないのですか?そうでない場合は、なぜ上記のプログラムをコンパイルしないのですか?
- C ++ 0x(もしあなたがそうするならC ++ 11)は何かを変えますか?
洞察をありがとう!
c++ - 定数式を整数型に評価する必要がありますか?
私が次のものを持っているとしましょう:
str
定数式と見なされますか?
多くの C++ の本から、定数式を整数型に評価する必要があるようです。
c - パラメータがCプリプロセッサマクロの積分定数式であるかどうかを確認するにはどうすればよいですか?
現在、既存のCライブラリをクリーンアップして、恥知らずに公開しています。
プリプロセッサマクロは、コンパイル時にNPOT
特定の積分定数式の2の次に大きい累乗を計算するために使用されます。マクロは通常、直接初期化で使用されます。他のすべての場合(たとえば、変数パラメーターを使用する場合)、同じ関数を持つインライン関数があります。
しかし、ユーザーが変数を渡すと、アルゴリズムは巨大なマシンコードに拡張されます。私の質問は 、ユーザーが整数定数式以外のものをマクロに渡さないようにするにはどうすればよいですか?
私がすでに試したこと:
- マクロをに定義し
#define NPOT(x) complex_algorithm(x ## u)
ます。それはまだ機能し、変数パラメータに対して-ほとんど役に立たない場合でも-コンパイラエラーをスローします。iuのような変数がない限り...汚い、危険な、それを望まない。 - ドキュメントは、ほとんどのユーザーには機能しませんでした。
c++ - 関数アドレスが定数式ではない理由
定数式で関数アドレスを使用する方法はありますか?
これはコンパイルされません。
エラー C2057: 定数式が必要です
この背後にある意図は、コンパイル時に 2 つの関数アドレスを比較したいということです。