問題タブ [language-lawyer]

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 投票する
7 に答える
38644 参照

c++ - デフォルトのコンストラクターはいつ必要ですか?

私の質問は簡単です。デフォルトのコンストラクターはいつ必要ですか?以下のコードを参照してください。

  1. コンパイラがRectクラスで暗黙的にゼロ引数のデフォルトコンストラクタを生成しないのはなぜですか?

  2. 私の知る限り、クラス(Rect)がデフォルトコンストラクター(暗黙的に生成または明示的に提供される)を持つ別のクラス(Shape)から派生している場合、デフォルトコンストラクターはコンパイラーによって生成される必要があります。

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

c++ - 匿名名前空間で関数を正しく参照する方法

次の C++ コードの断片を考えてみましょう。

GCC はこれを問題なくコンパイルします。Visual C++ 2008 がコンパイルに失敗し、C2039 エラーが発生します。これら 2 つのコンパイラのうち、どちらが正しいですか? その「グローバル」 fを適切に参照する方法はありますか?

編集:ザックは試してみることを提案しましたが、両方のコンパイラで動作します。私には少し奇妙に見えます。

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

javascript - Gecko の Javascript インタープリター エンジンのセマンティクスとは?

編集

参考ECMAScript Language Specification - 11.13.2 Compound Assignmentについての下記回答を参考に

これらの理由を考えると、

同じではありません。左から右へのスクリプト評価には一時的なセマンティクスの問題があります (参照: ECMA 仕様 - 加算演算子)。結果の 1 つは、+演算子が必ずしも交換可能ではないということです。

これは、次の方法でも確認できます。

また

怠惰な評価パラダイムは、私が誤って不適切に使用し、それによって以下の問題を引き起こしていますが、これも私の個人的なやり方の悪い属性です。


元の投稿

次の考慮事項は、既に対処されている可能性がありますが、そうではないようです。もしそうなら、議論へのリンクを提供できますか?

Gecko Javascript ランタイム エンジンの正式な表示セマンティクスは謎です。経験的テストは疲れ果てており、網羅的ではありません。

  • Gecko が Javascript をどのように解釈するかを正確に定義している正式な正式な仕様または公式リファレンスはありますか?

参考文献ECMAScript Language Specificationは不適切なようですが、次のようなスクリプトを作成するための信頼性が提供されています。

値をバインドするときのそのような構造の結果的な意味を持ちます。

  • オブジェクトとインスタンスの評価のための Javascript コードの解釈を説明する決定的なパラダイムはありますか?

これにより、必要性、値、参照、推論、名前などの呼び出し (または使用) の概念が、関連するかどうかに応じて明確になります。つまり、Javascript はプロトタイピング インタープリターであり、以下の問題のいくつかに暗黙の意味を与えます。

期待される結果は次のとおりです。

? 結果を予測するのは簡単ですか (正確に!)?

evalこの質問は、解釈の微妙なニュアンスを強要して強調するために 's' を使用して特別に考案されたものであるため、少し修辞的です。このスクリプト (および以下の余談) の評価は、ECMAScript 言語仕様または以前に言及した別のドキュメントのいずれかで解決できますか?

(余談ですが、次のことを考慮してください。

以下が表示されます。

ここで、 の部分評価はraに類似していませんo.n!

on を使用するよりも風変わりではありません。

以下が表示されます。

)

次のスクリプトを検討してください。

Gecko エンジンは以下を出力します。

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

c++ - クラスが純粋な基本クラスから継承する場合のデフォルトのデストラクタは何ですか?

次の2つのクラスを検討します。

次の原因で未定義の動作が発生していますか?

追加の質問:メソッドが仮想として宣言され、派生クラスでは仮想であるのはなぜですか(派生クラスで仮想キーワードが使用されていない場合でも)が、デストラクタには当てはまりませんか?

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

c++ - イニシャライザが一時的に破棄されるのはいつですか?

いくつかの質問に答えた後、私は今日この実験を構築しました

b動的初期化によってfalse設定する前に(ゼロ初期化の結果として)値があります。終了trueの初期化の前に一時が破棄された場合は、を出力します。それ以外の場合はを出力します。bfalsetrue

仕様によると、一時は完全な式の最後に破棄されます。これは、の初期化では順序付けられていないようですb。だから私は疑問に思う

  • 仕様では、実装が異なる実行の両方falseで印刷することを許可していますか?true

Clangfalseは上記を印刷し、GCCはを印刷しtrueます。これは私を混乱させます。順序を定義する仕様テキストを見逃しましたか?

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

c++ - 使用ポイントの後にテンプレート関数を特殊化すると、コンパイルが中断されます

次の例を考えてみましょう:

コンパイルは失敗し、次のエラーメッセージが表示されます。

標準のどの段落がこのエラーを説明していますか?

PS:mainの前に関数定義を移動すると、エラーがなくなることを知っています。

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

java - Java:コンパイル時の解決と「最も具体的な方法」

オーバーロードされた関数、、compute1()を以下で使用しようとすると、コンパイルエラーが発生しますcompute2()compute5()

JLSセクション15.12を読んだ後、私は理解していると思います...オーバーロードされたメソッドのマッチングのフェーズ2(ボクシング/アンボクシングが許可され、varargsはありません)で、「最も具体的なメソッド」を決定するとき、JLSは(事実上)最も特定のメソッドは、正式なパラメーターが他の適用可能なメソッドのサブタイプであるメソッドであり、プリミティブとオブジェクト(egintInteger)が互いにサブタイプになることはありません。したがってInteger、はのサブタイプであり、はのサブタイプですが、とIntegerはw / r / tサブタイプの比較と互換性がないため、/ペアのどちらにも最も具体的な方法はありません。intintIntegerintcompute1()compute2()

(incompute3()と引数compute4()を持つメソッドは、String引数を持つメソッドよりも具体的であるObjectため、プログラムは6と8を出力します。)

私の推論は正しいですか?

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

c++ - std::string は C++11 で常に null で終了しますか?

Herb Sutter は、2008 年の彼のサイトへの投稿で、次のように述べています。

C++0x でこれをさらに強化し、null 終了を要求し、同時実行性に関連する理由からコピー オン ライトの実装を禁止するという積極的な提案があります。ここに論文があります:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2534.html。この論文の提案の 1 つまたは両方が採用される可能性が高いと思いますが、次の 1 回か 2 回の会議でわかります。

C++11 が std::string の内容が連続して格納されることを保証するようになったことは知っていますが、最終ドラフトで上記を採用しましたか?

のようなものを使用しても安全&str[0]ですか?

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

c++ - この例は未定義の動作を引き起こしていますか?

重複の可能性:
未定義の動作とシーケンス ポイント

変数iは 2 回変更されていますが、次の例では未定義の動作が発生しますか?

私が得る出力は次のとおりです。

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

c++ - null void* ポインターを削除するのは未定義の動作ですか?

deletenull ポインターを ing することは何もしないことを知っています。

いずれの場合も、delete のオペランドの値がヌル ポインターの場合、操作は無効になります。
(C++ 標準5.3.5 [expr.delete] p2)

またvoid*、 type のオブジェクトがないため、デストラクタを呼び出すことができないため、ポインタの削除は未定義の動作ですvoid

最初の選択肢 ( delete object) では、delete のオペランドの値は、非配列オブジェクトへのポインター、またはそのようなオブジェクトの基本クラスを表すサブオブジェクトへのポインターでなければなりません。そうでない場合、動作は未定義です。
(C++ 標準5.3.5 [expr.delete] p2)

さて、通常は最初にリストされたものは後でリストされたものよりも優先されると思いますvoid*が、次のようなヌルポインターはどうですか?