問題タブ [ambiguity]
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++ - 修飾された仮想メソッドのオーバーライド
複数の親を持つC++クラスがあります。各親は、共通の名前で異なる目的で関数を定義します。
そうであれば、問題はありません。usingステートメントを使用してあいまいさを解決し、基本クラス名とスコープ解決演算子を使用してどちらを呼び出すかを選択できます。
残念ながら、派生クラスはそれらの両方をオーバーライドする必要があります。
これは機能しません。これは、新しいあいまいさを導入するためではなく(可能性はありますが)、
"エラーC3240:'myFunc':'BaseA'のオーバーロードされていない抽象メンバー関数である必要があります"
「エラーC2838:メンバー宣言に不正な修飾名があります」
さまざまな状況下で、メソッドの名前を変更するか、コンパイラーが提案するようにメソッドを純粋な仮想にすることができます。ただし、クラス階層構造と多くの外部の問題により、最初のオプションは非常に難しく、2番目のオプションは不可能です。
誰か提案がありますか?修飾子が純粋仮想メソッドでのみ許可されるのはなぜですか?仮想メソッドをオーバーライドし、あいまいさを解決する方法はありますか?
c++ - intおよびchar*を使用したc++オーバーロードコンストラクタ
コンストラクターをint
とでオーバーロードしようとしchar *
ます。次に、との呼び出しにあいまいさがあります0
。これに対する回避策/解決策はありますか?
問題は次のようになっています0
:
回答ありがとうございます。
c# - .Net / C# が同じ名前のプロパティを持つインターフェイスの継承を理解できないのはなぜですか?
次のクラスとインターフェースを検討してください。
シンプルに見えますよね?ここで、次のプログラムを検討してください。
問題ないように見えますが、コンパイルされません。それは私に曖昧な例外を与えます:
C# がこれを理解できないのはなぜですか? 私がやっていることは、アーキテクチャの観点からクレイジーですか? 理由を理解しようとしています(キャストで解決できることはわかっています)。
編集
interface を導入したときに問題が発生しましたC
。使っMyClass : A, B
てみると全く問題ありません。
最後の
このテーマに関するブログをちょうど完成させました: Interface Ambiguity and Implicit Implementation。
c++ - std::list イテレータが割り当てられない
あいまいな質問のタイトルで申し訳ありませんが、ここにこれらの typedef があります。
そして、次のようなクラスを考えてみましょう:
私はイテレータを保存しているので(悪い考えのようです)、コピー/代入コンストラクタも持っていますが、問題はそこにあります。
「それ」の 1 つ (もう 1 つの foo) をキーフレームに割り当てようとするとすぐに、あいまいさの問題のようなエラーが発生します。
バイナリ '=' : タイプ 'std::_List_const_iterator<_Mylist>' の右側のオペランドを取る演算子が見つかりません (または、受け入れ可能な変換がありません)
追加情報:
この奇妙な動作の原因は何ですか? イテレータを状態として使用する私の悪いスタイルを疑っています...しかし、ポインターを保持する以外に、他にどのようにできるかわかりません。
c++ - 関数のあいまいな参照/値バージョン
次の関数プロトタイプを検討してください。
2 番目は、最初の観点から実装されます。つまり、一方が参照渡しで、もう一方が値渡しであることを除いて、すべての点で機能的に同一です。
ただし、値を返さないのは最初の形式だけですが、GCC は次のような場合はあいまいであると述べています。
これに対する回避策はありますか、または各フォームに異なる名前を付ける必要がありますか?
c++ - 名前空間の過剰使用の回避
私のライブラリは、次のようにレイアウトされた、いくつかのネストされた名前空間を使用します。
「Utilities」名前空間には、実際のクラス自体に含めることを保証しない、各クラスへの便利な拡張機能が含まれています。
「ライブラリ名」名前空間は、他のライブラリとの広範な競合を回避するために必要です。「ユーティリティ」名前空間は、このようなものから生じるあいまいさのタイプを回避するために必要であり、その中の「クラス名」名前空間は、名前の衝突を回避します。同様のクラス用に作成されたユーティリティ。
それにもかかわらず、実際にはまだ非常に面倒です。たとえば、次のようにします。
これは、私が何か重大な間違いをしていると思わせてくれます。物事を整理し、直感的で明確に保つためのより簡単な方法はありますか?
c - 数値比較のあいまいさ (C)?
私は C でのプログラミングにあまり詳しくありません (この言語でいくつかの小さなプロジェクトしか行ったことがありません) が、私の教授は今日の C の動作について何か言っていて、少し混乱しました。
彼が言ったことは、このコードはまったく何も出力しない場合があるということでした (私はボード上にあったものを正確にコピーしました。「印刷」は C にはないので、これは C の疑似コードだと思います):
基本的に、これらの条件のいずれも満たされない int 変数に格納できるものがあります ( _ __ _は明らかに実際のコードではなく、何かがあることを表しているだけです)。それらの空白を埋める int 数値である必要は必ずしもありません...それは世界中の何でもかまいません (そして、このコードの前に起こったことがあるかもしれません)。
それらの空白を埋めることができ、結果をもたらさないのは何ですか? また、その理由は何ですか?
ps - オーバーフロー、未定義の動作、範囲外エラーなどと関係がありました
pps - この教授が間違っていたとはとても信じられません。彼は、私がこれまで接触した誰よりもプログラミングに精通しています。これが真実である場合があると私は確信しています。
c++ - 参照渡しと値渡しの違い
参照渡し関数は通常、値渡し関数とどのように区別されますか? 例えば:
これら 2 つの関数はあいまいです。そのうちの 1 つは名前を変更するか、完全に削除する必要があります。
この状況をどのように回避できますか? どちらかの形式を優先する必要がありますか? または、それらを区別するための一般的な命名ガイドラインはありますか?
c++ - 文脈依存性と曖昧さ
文脈依存性とあいまいさが互いにどのように影響するかについて、私は混乱しています。
私が正しいと思うのは次のとおりです。
あいまいさ:
あいまいな文法は、左または右の派生を使用して複数の構文木を構築することにつながります。考えられるすべての文法があいまいな言語は、あいまいな言語です。
たとえば、C++ はあいまいな言語です。なぜなら、x * y は常に 2 つの異なることを意味する可能性があるからです: Why can't C++ be parsed with a LR(1) parser? .
状況依存性:
文脈依存文法には、これらの規則の左側に、さまざまな種類の文法のすべての規則の左側に必要な 1 つの非終端記号に加えて、(非) 終端記号を含めることができる規則があります。つまり、下降中に非終端記号を置き換えることはできません。代わりに、最初に周囲の非終端記号を確認する必要があります。
ここで気になるのは、多かれ少なかれ文脈依存パーサーが x * y のような曖昧さを解析できると言っているステートメントです。たとえば、上記のリンクされた質問では、「... [作成中に構文ツリーを装飾する] パーサーはコンテキスト フリーではなく、LR パーサー (純粋なパーサー) はコンテキスト フリーである」と述べられています。私の意見では、これは文脈依存パーサー (文脈自由パーサーの反対?) がこれを行うことができることを意味します。別の例は、C++ 構文の一部は文脈依存ですか? この質問には「はい...」と答えます。ここでも同じです:あいまいな文脈自由文法とは何ですか?
この C++ のあいまいさが文脈依存性と何の関係があるのかわかりません。このあいまいさに対処できる文脈依存文法はないと思います。たとえば、Typedef, <other>*, PointerDeclaration -> Ident "*" Ident のような架空のルールを使用する場合
その場合、具体的な最初の Ident (例: "x") が Typedef (例: typedef double x;) で使用されたかどうかを (純粋な解析では) 判断することはできません。
したがって、「文脈依存性」という用語がリンクされた質問内で使用されている可能性はありますが、文脈依存性のような単純なものを意味します (たとえば、単純なパーサーによって提供されるよりも多くの情報が必要です)。または、「実際の」文脈依存性とあいまいさの間に何らかの関係がありますか。
編集より具体的な質問: 文脈依存文法を使用して対処できる、文脈自由文法内に何らかの種類のあいまいさはありますか? リンクされた質問では、C++のあいまいさが文脈依存の問題と呼ばれることがあるように聞こえるため、この質問が私に起こります。
Edit2追加情報: 本Computer Systemsの346 ページには、実パラメータと仮パラメータの量が同じであるなどの要件は、文脈依存文法で表現できると記載されています。しかし、多くの複雑なルールが必要になるため、これは非常に面倒です。しかし、おそらくこれは、前述の C++ のあいまいさにも当てはまる可能性があります。次のようなルールがあるように
"Typedef double x", <other>*, PointerDeclaration -> "x" "*" Ident
もちろん、そのようなルールは非常に限られており、すべての可能性を表現するには膨大な量が必要になります。少なくともこれは、(理論的に)文脈に依存しない自由なあいまいさを文脈依存のルールの使用に置き換えることができるかどうかという質問の答えへのアプローチになる可能性があります