問題タブ [language-specifications]
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# - 演算子 '==' は型 T に適用できませんか?
この方法は有効だと思いましたが、間違っていました:
仕様を読んだ後 (v3.0 では §7.2.4、v4.0 では §7.3.4):
7.2.4 二項演算子のオーバーロード解決
x op y という形式の演算 (op はオーバーロード可能な二項演算子、x は X 型の式、y は Y 型の式) は、次のように処理されます。
演算演算子 op(x, y) に対して X および Y によって提供される候補ユーザー定義演算子のセットが決定されます。セットは、X によって提供される候補演算子と Y によって提供される候補演算子の和集合で構成され、それぞれが §7.2.5 の規則を使用して決定されます。X と Y が同じ型である場合、または X と Y が共通の基本型から派生している場合、共有候補演算子は組み合わせセットで 1 回だけ出現します。
候補のユーザー定義演算子のセットが空でない場合、これが操作の候補演算子のセットになります。それ以外の場合は、事前定義された二項演算子 op の実装 (持ち上げられた形式を含む) が、演算の候補演算子のセットになります。特定の演算子の事前定義された実装は、演算子の説明で指定されます (§7.7 から §7.11)。
§7.4.3 のオーバーロード解決規則が候補演算子のセットに適用され、引数リスト (x, y) に関して最適な演算子が選択され、この演算子がオーバーロード解決プロセスの結果になります。オーバーロードの解決で最適な演算子を 1 つ選択できなかった場合、コンパイル時エラーが発生します。
ステップ 2 では、この定義済みの実装を適用する必要があると思います。
C# ではすべてが Object から派生しているためです。手順 3 でコンパイル時エラーが発生するのはなぜですか? この場合、「過負荷の解決が選択に失敗する」可能性はないと思います。
編集次のようなものを実装していたときに、この質問が頭に浮かびました。
残念ながら、式を作成してメソッドで動的に呼び出す必要がありEquals
ます。
c# - C#のshort / long / intリテラル形式?
C / C#/etcで。リテラル番号が見た目とは異なることをコンパイラーに伝えることができます(つまり、float
の代わりにdouble
、のunsigned long
代わりにint
):
等
誰かが私にこれらのリストを教えてもらえますか?short
特にまたはの接尾辞を探していInt16
ます。
c++ - この C++ の明示的なテンプレート特殊化コードが違法なのはなぜですか?
(注:違法であることは知っています。言語がそうする理由を探しています。)
エラー:
Google との簡単なパスで、この仕様の引用が見つかりましたが、それは理由ではなく、何を提供するだけです。
編集:
いくつかの応答は、ルールがこのようになっているという議論を進めています (たとえば、私の推測を確認しました)。そうしないと、One Definition Rule (ODR)に違反するからです。ただし、この場合、次の 2 つの理由で成立しないため、これは非常に弱い議論です。
- 明示的な特殊化を別の翻訳単位に移動すると、問題が解決し、ODR に違反していないように見えます (リンカーがそう言っています)。
- (関数に適用される) ODR の短い形式は、任意の関数に対して複数の本体を持つことはできないということです。私はそうではありません。関数の本体が定義される唯一の場所は明示的な特殊化で
Foo<int>
あり、特殊化する汎用本体がないため、 への呼び出しはテンプレートの汎用特殊化を定義できません。
この件に関する憶測:
ルールが存在する理由についての推測: 最初の行が (宣言ではなく) 定義を提供した場合、複数の定義を取得するため、インスタンス化後の明示的な特殊化が問題になります。しかし、この場合、目に見える唯一の定義は明示的な特殊化です。
奇妙なことに、次の(または私が取り組んでいる実際のコードのようなもの)が機能します:
ファイル A:
ファイル B:
しかし、一般的にそれを使用すると、スパゲッティのインポート構造が作成されます。
c++ - これは C++ で合法的に行うことができますか?
注:次のコードは不正ですが、準拠するコンパイラはそれを拒否する必要はありません(拒否しないものもあります)。
私が使用しているライブラリには、のテンプレート関数宣言とinFoo
のテンプレート関数定義があります。Bar
foobar.h
意図は、他のコードが次のように使用できるようにすることです。
質問: この作業を合法的に行う方法はありますか?
問題は (私が物事を正しく理解している場合) コンパイルしても、これは技術的に違法であるということです:明示的な特殊化と の使用の両方が定義としてカウントされるため、 ODRBar<MyClass>
に違反します。使用例。
このパターンを使用してパラメーター化する理由Foo
は、スタイル ガイドに従う必要があるため、 の定義の前に何かが字句的に含まれていることを確認する唯一の方法は、Bar
によって含まれていることfoobar.h
です。しかし(説明する必要はないと思う理由で)それは初心者です。
c++ - オブジェクトの有効期間に関する質問: N3242 ドラフト
C++ 11 n3242「サブオブジェクトの期間、オブジェクトの有効期間」、3.8/1 からのポイント:
オブジェクトの有効期間は、オブジェクトのランタイム プロパティです。オブジェクトがクラスまたは集約型であり、それまたはそのメンバーの 1 つが自明なデフォルト コンストラクター以外のコンストラクターによって初期化される場合、そのオブジェクトは非自明な初期化を持つと言われます[ 注: 自明なコピー/移動コンストラクターによる初期化は非自明です。 -些細な初期化。— エンドノート]
型 T のオブジェクトの有効期間は、次の時点で始まります。
- タイプ T に適した位置合わせとサイズのストレージが取得されます。
- オブジェクトに重要な初期化がある場合、その初期化は完了しています。
タイプ T のオブジェクトの存続期間は、次の場合に終了します。
- T が非自明なデストラクタ (12.4) を持つクラス型の場合、デストラクタの呼び出しが開始されます。
- オブジェクトが占有するストレージは再利用または解放されます。
ここで彼らは、オブジェクトの有効期間を持つ自明または自明でないコピー/移動コンストラクターについて述べました。これをサンプルプログラムで説明できる人はいますか?
また、ポイントの変化は、型のオブジェクトの寿命がいつ始まるかを示していますが、いつ終わるT
かについては言及していません。T
なんで?
objective-c - Objective-C 2.0 ABI 仕様
Objective-C 2.0 ABI のドキュメントはインターネット上のどこかにありますか? 言うためのリリースノートobjc4-493.9
:
今後のドキュメントでは、コンパイラと開発者ツールのみを使用するための ABI について説明します。
それ以来、それはリリースされましたか?そのようなリファレンスに最も近いのは Apple のObjective-C ランタイム リファレンスですが、これは実装の詳細ではなく、一般向けの API についてのみ説明しています。実際、ABI についても触れています。
さらに、新しい Objective-C ABI (ここでは説明しません) [...]
残念ながら、新しい ABI は前述のテキストにハイパーリンクされていません。:-)objc4
ランタイムと Clang のCGObjCNonFragileABIMac
コード生成プロジェクトのソース コードを理解する唯一のオプションはありますか?
c# - C# でジェネリック プロパティが許可されないのはなぜですか?
ジェネリックメソッドを持つことができる方法で、非ジェネリッククラスでジェネリックプロパティを持つことができないのはなぜだろうと思っていました。すなわち:
@Jon Skeet's answerを読みましたが、それは単なるステートメントであり、おそらく仕様のどこかにあります。
私の質問は、なぜ実際にそのようになっているのですか?この制限により、どのような問題が回避されましたか?
java - JavaでFoo(Object...)をFoo(Object[])でオーバーロードできないのはなぜですか?
Foo(Object[] args)
別の方法で使用されているにもかかわらず、Java で をオーバーロードすることが許可されていないのはなぜFoo(Object... args)
でしょうか?
次のように使用されます。
一方、他の形式:
次のように使用されます。
これには何か理由がありますか?
c# - C# と C++ での ++i 演算子の違い
次のコードを C++ と C# の両方で記述しています。
このC#コンパイラがエラーを引き起こした後
しかし、C++ コンパイラはこのコードをエラーなしで生成し11
、値 の結果を得ましたi
。この違いの理由は何ですか?
f# - F#仕様シンボリック演算子VSシンボリックキーワード
私はF#仕様(ここで見つけた最新のもの)を読んでいて、間違いなく難しい方法で言語を学ぶ努力をしています。「3.6シンボリックキーワード」のセクションでは、仕様に次のように記載されています。
次のシンボリックまたは部分的にシンボリックな文字シーケンスは、キーワードとして扱われます。
次のセクション「3.7シンボリック演算子」では、次のように述べています。
ユーザー定義およびライブラリ定義のシンボリック演算子は、文字のシーケンスがシンボリックキーワード(§3.6)である場合を除いて、以下に示す文字のシーケンスです。
明らかな何かが欠けているかもしれませんが、仕様には、演算子/キーワード、、、、、およびが?
両方とも記号キーワードであり、記号演算子であると記載されているようです。それで...彼らはどれですか?シンボリックキーワードトークンまたはシンボリック演算子トークンを使用する天気を知るにはどうすればよいですか?@>
@@>
<@
<@@
よろしくお願いします、ブランドン
編集明確にするために、シンボリック演算子がこれらのシンボルになることができないと述べた直後に、シンボリック演算子がこれらのシンボルになることができると仕様が述べている理由を知りたいです。