問題タブ [token-name-resolution]
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コンパイラはインポートされていない名前をどのように解決しますか
パッケージのX
Java コンパイル ユニットで型を使用し、コンパイル ユニット自体で定義されておらず、直接インポートされていないことを考慮してください。Javaコンパイラはどのように効率的に解決しますか? 存在する可能性がいくつかあります。foo.bar
X
X
X
X
スターインポート経由でインポートされる可能性がありますa.b.*
X
コンパイル単位と同じパッケージに存在する可能性がありますX
言語タイプである可能性があります。つまり、次の場所に存在しますjava.lang
私が見る問題は特に(2.)です。はパッケージ プライベート タイプである可能性があるため、という名前のコンパイル ユニットに存在するX
必要さえありません。したがって、コンパイラはクラスパスのすべてのエントリを調べて、パッケージ内のクラスを検索する必要があります。次に、パッケージ内のすべてのクラスを読み取って、が含まれているかどうかを確認する必要があります。X
X.java
foo.bar
foo.bar
X
それは非常に高価に聞こえます。特に、単一のファイルのみをコンパイルする場合、コンパイラは type を見つけるためだけに数十のクラス ファイルを読み取る必要がありますX
。多くのスター インポートを使用する場合、この手順を多くの型に対して繰り返す必要があります (もちろん、クラス ファイルを 2 回読み取ることはありません)。
では、コンパイル プロセスを高速化するために、同じパッケージから型もインポートすることをお勧めしますか? または、見つけられなかったインポートされていない型を解決するためのより高速な方法はありX
ますか?
c++ - オーバーロードされた演算子に関して、ADL または命名の衝突に関して異なる規則はありますか?
この例が私の質問を最もよく表していると思います:
私は常にオーバーロードされた演算子を「呼び出し構文」を除いて関数と同じであると見なしてきました。上記の違いに気付きましたが、ADL または名前検索ルールに違いがあります (どちらかわかりません)。
bool operator==(const C& c, const C& x)
が見つかったのに が見つからない理由を誰か説明できますかbool f(const C& c, const C& x)
?
c++ - getenv() が std:: なしで解決された名前を取得できるのはなぜですか?
getenv() には、ヘッダー ファイルに含めることができる C++ 実装があります。したがって、名前空間 std のメンバーです。ただし、getenv() 関数は、std::getenv() がなくてもコード内で正しく解決できます。つまり、フォロー プログラムをエラーや警告なしでコンパイルして実行できます。では、名前空間 std の名前メンバーとしての getenv() が std:: なしで解決できるのはなぜですか? 私の OS とコンパイラは、それぞれ Ubuntu 12.04 i386 と g++ 4.8.1 です。
c++ - C++ は静的な名前解決または動的な名前解決を使用しますか?
私はウィキペディア( Name resolution WIKI )で「名前解決」について読んでおり、C ++が「静的名前解決」を使用していることが示されています。それが本当なら、動的な名前解決を使用せずに C++ がどのように「ポリモーフィズム」を提供するかを理解できませんでした。
C ++が「静的名前解決」または「動的名前解決」を使用しているかどうか、誰でも答えてください。静的である場合、C++ がポリモーフィズムを提供する方法についても説明できますか。
c++ - C++ カスタム ヘッダー ファイル - 構文エラー C2061: 識別子
シンタックス エラー C2061 についてしばらく調べていたところ、ヘッダー ファイルの循環依存関係が原因であることが多いことがわかりました。ただし、ファイルでこれを解決する必要があったと思いますが、引き続き問題が発生します。
アーチ
Node.h
ヘッダー ファイルは両方とも、対応する cpp ファイルに含まれています。この問題に関するヘルプは大歓迎です!
編集:以下の完全なエラーメッセージ
c++ - テンプレート引数として渡された派生クラスで定義された型を参照する方法は?
次の例を検討してください。
GCC でコンパイルすると、次のエラーが発生します。
が定義されている場合にコンパイラがエラーを出すのはなぜB::C
ですか? また、その修正方法は?