問題タブ [argument-dependent-lookup]

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 に答える
1999 参照

c++ - 別の名前空間からの typedef を使用した ADL

私はこのようなものを持っています:

(残念ながら)に関連付けられていないため、ADL は検出されないoperator<<ため、これは当然機能しません。私の知る限り、名前空間 std に追加できない場合があるため、std で定義することを選択した場合、それはちょっと違法になります。では...そのような状況ではどうすればよいですか?を明示的に修飾したくはありませんし、書きたくもありません。したがって、質問は次のとおりです。namespace NMyPairoperator <<operator <<using namespace N

  1. コードをリファクタリングするには?
  2. ADL が typedef の名前空間を関連付けないのはなぜですか? 深刻な理由?たとえば、この場合はいいでしょう。ありがとう
0 投票する
5 に答える
1231 参照

c++ - 引数依存ルックアップが発明されたのはなぜですか?

引数依存ルックアップ (ADL) が発明されたのはなぜですか? cout << stuffの代わりに書けるようにするためstd::operator<<(cout, stuff)ですか?その場合、ADL がすべての関数ではなく演算子に限定されなかったのはなぜですか?

C++ に組み込み型とユーザー定義型の両方のジェネリック出力を行う別の方法があった場合、ADL の導入を防ぐことができたprintfでしょうか。

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

c++ - Koenig ルックアップの根拠

Koenigルックアップの理論的根拠は何ですか?

コードを読みにくくし、より不安定にする何かのように考えることは避けられません。

特定のケース (つまり、非メンバー演算子) または明示的に必要な場合にのみ機能するように、Koenig ルックアップを定義できませんでしたか?

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

c++ - C++ 演算子ルックアップ規則 / Koenig ルックアップ

テスト スイートを作成しているときにoperator<<(std::ostream&...、Boost 単体テストを使用するための実装を提供する必要がありました。

これはうまくいきました:

これはしませんでした:

どうやら、g++ が演算子の使用を解決しようとしたときに、2 番目は一致候補に含まれていませんでした。なぜ(これを引き起こすルールは何ですか)?

コード呼び出しoperator<<は Boost 単体テスト フレームワークの奥深くにありますが、テスト コードは次のとおりです。

参考までに、私は g++ 4.4 を使用しています (ただし、現時点では、この動作が標準に準拠していると想定しています)。

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

c++ - クラス メソッド実装の本体内で「std::swap を使用する」とはどういう意味ですか?

私は、この質問に関するこの完全な説明に従って、copy-swap イディオムを学び、採用しようとしていました: Copy-Swap Idiom .

しかし、見たことのないコードを見つけました:using std::swap; // allow ADLこの例では

  1. using std::swap;関数実装の本体内での意味は何ですか?
  2. ADL とはどういう意味ですか?
0 投票する
4 に答える
1010 参照

c++ - クラス引数を持つ関数が名前空間からリークされていますか?

私はあなたの考慮のためにここに小さなコードを持っていますが、それは私をかなり困惑させます。奇妙なことに、Sun StudioとGCCの両方でコンパイルされますが、コンパイルされるべきではないと思います。

このことを考慮:

同じ名前空間からのclass引数により、関数は名前空間fから「リーク」し、。なしでアクセスできるようになりますname::

誰かがこれについての説明がありますか?確かに私であり、コンパイラがここで間違っているわけではありません。

0 投票する
5 に答える
803 参照

c++ - C++での引数依存の名前ルックアップのルール

最近、ADLに関するSOについていくつか質問があり、私は考えさせられました。基本的に、ADLを実行するときにコンパイラが検索できるヘッダーファイルはわかりませんか?それはユーザーのコードに含まれているものだけですか、それともユーザーのコードで使用されているのと同じ名前空間を持つ他のヘッダーファイルを含めることができますか?例えば。std名前空間は複数のヘッダーファイルにまたがっています。ただし、その一部のみを含めることができます。stdここで、ヘッダーファイルのこのサブセットには含まれていないが、名前空間(インクルードしていないファイル)にはある関数を定義した場合でも、あいまいな呼び出しになりますか?私は主にこの質問に関する議論のためにこの疑問を抱きました

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

parameters - SCORM 2004 ADL テスト スイート エラー

tldnr:組織アイテムのパラメーター オブジェクトで "/" を許可するバリエーションが必要です。

「コンテンツ パッケージの適合性テスト」を実行しているときに、parameters 属性の場合に次のエラーが表示されます。これはコンテンツが機能するために必要な属性ですが、「/」が含まれている限り検証されません。SCORM クラウドでパッケージをテストしたところ、意図したとおりに読み込まれて起動されましたが、同様に検証する必要があります。「/」を維持するが、適切に検証できるようにするために使用できるバリエーションはありますか?

エラー: [?first=0&dir=dir/subdir] は、IMS CP 1.1.4 および "parameters" 属性の SCORM で定義された構文に準拠していません

試したバリエーション:
?dir=dir//subdir&first=0 //同じエラー
?dir=dir\/subdir&first=0 //同じエラー
?dir=dir\subdir&first=0 //同じエラー
?dir=dir/subdir&first=0 / /same error
?dir=dir⁄subdir&first=0 //xml を無効にする

さらに試したこと:

%3Ffirst%3D0%26wd%3Ddir%2Fsubdir //同じエラー
?first=0&wd=dir%2Fsubdir //同じエラー

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

c++ - operator< を使用してタプルとペアを出力する合法的な方法はありますか?

operator<<タプル/ペアの各タイプが定義されていると仮定して、タプル/ペアを出力できるテンプレート/関数のセットがあります。残念ながら、17.4.3.1 により、operator<<オーバーロードをに追加することは違法stdです。ADL に私の を見つけさせる別の方法はありますoperator<<か? そうでない場合、オーバーロードをラップすることに実際の害はありますnamespace std{}か?

興味のある人のためのコード: (私は gcc-4.5 を使用しています)

上記をコンパイルすると、次のようになります。

test.cpp: 関数 'int main()' 内:
test.cpp:69:31: エラー: 'std::ostream' 左辺値を 'std::basic_ostream&&' にバインドできません > /opt/local/include/gcc45/c++ /ostream:579:5: エラー: 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) の引数 1 を初期化しています [with _CharT = char 、_Traits = std::char_traits、_Tp = std::tuple]'


おそらく最良のアイデアは、サイトのブログ レイアウトを再作成することです。時間がかかり、基本的な html + css のスキルが必要になりますが、これが最良の選択肢です。

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

c++ - 範囲ベースの for ループと ADL

C++0x 標準作業草案(セクション 6.5.4) では、範囲ベースの for ループで暗黙的に行われる begin() および end() 呼び出しについて次のように述べています。

'begin' と 'end' は、引数依存のルックアップ (3.4.2) でルックアップされます。この名前検索の目的で、名前空間 std は関連付けられた名前空間です。

これを読むと、begin() と end() の呼び出しに設定されたオーバーロード解決には、次のすべてが含まれることを意味します。

  • 範囲ベースの for ループが使用される場所でスコープ内にある begin() および end() のすべてのオーバーロード (特に、グローバル名前空間内のすべてのオーバーロードがスコープ内になります)
  • 名前空間 std の begin() と end() のすべてのオーバーロード
  • 引数に関連付けられた他のネームスペース内の begin() および end() のすべてのオーバーロード

あれは正しいですか?

g++ 4.6 の動作は、この解釈と一致していないようです。このコードの場合:

次のエラーが発生します。

これは、グローバル名前空間のオーバーロードではなく、名前空間 std のオーバーロードのみを考慮していることを示唆しています。

ただし、グローバル名前空間で宣言された独自のペア クラスを使用すると、正常にコンパイルされます。

最終テストとして、my_pair を別の名前空間に配置してみました。

そして再びエラーが発生します:

そのため、名前空間 std およびその他の関連する名前空間のオーバーロードのみを考慮しているようであり、呼び出しサイトでスコープ内にあるオーバーロードは考慮していないようです (上記のリストの最初の箇条書き)。

これは gcc のバグですか、それとも標準を誤解していますか?

後者の場合、範囲ベースの for ループで std::pair オブジェクトを範囲として扱うことは不可能であることを意味しますか (std::begin() と std::end() をオーバーロードする必要はありません)。間違いは許されません)?