タグ付けされた質問 「friend-function」

2
演算子のオーバーロード:メンバー関数と非メンバー関数?
メンバー関数として宣言されたオーバーロードされた演算子は非対称であると読みましたthis。これは、パラメーターを1つしか持つことができず、自動的に渡される他のパラメーターがポインターであるためです。したがって、それらを比較する基準はありません。一方、オーバーロード演算子はとして宣言されfriendている対称我々は、同じタイプの2つの引数を渡し、したがって、それらを比較することができるからです。 私の質問は、ポインターの左辺値を参照と比較できるのに、なぜ友達が好まれるのですか?(非対称バージョンを使用すると、対称バージョンと同じ結果が得られます)なぜSTLアルゴリズムは対称バージョンのみを使用するのですか?

1
C ++コンパイル時間カウンター、再訪
TL; DR この投稿全体を読む前に、次のことを知っておいてください。 提示された問題の解決策は自分で見つけましたが、分析が正しいかどうかを知りたいと思っています。 fameta::counter残りのいくつかの癖を解決するクラスにソリューションをパッケージ化しました。githubで見つけることができます。 godboltの作業でそれを見ることができます。 すべての始まり FilipRoséenが発見/発明して以来、2015年に、時間カウンターをコンパイルするブラックマジックはC ++にあるため、デバイスにややこだわっていたため、CWG が機能を実行する必要があると判断したときはがっかりしましたが、彼らの心はいくつかの説得力のある使用例を示すことで変更できます。 次に、数年前、私はそのことをもう一度確認することにしました。これにより、uberswitch esを入れ子にできるようになりました-私の意見では興味深いユースケースです- の新しいバージョンではもはや機能しないことを発見しただけです。問題2118がオープン状態であっても(現在も)利用可能なコンパイラー:コードはコンパイルされますが、カウンターは増加しません。 この問題は、RoséenのWebサイト、および最近ではstackoverflowでも報告されています。C++はコンパイル時カウンターをサポートしていますか? 数日前、もう一度問題に取り組み、取り組むことを決めました コンパイラーの何が変わったのかを理解したかったのです。そのために、私は誰かがそれについて話してくれるようにインターウェブをずっと遠くまで検索しましたが、役に立ちませんでした。だから私は実験を始め、いくつかの結論に達しました。私はここで提示しているのですが、ここでは自分よりも知識のある人からフィードバックを得たいと思っています。 以下では、わかりやすくするために、Roséenの元のコードを示します。それがどのように機能するかの説明については、彼のウェブサイトを参照してください: template<int N> struct flag { friend constexpr int adl_flag (flag<N>); }; template<int N> struct writer { friend constexpr int adl_flag (flag<N>) { return N; } static constexpr int value = N; }; template<int …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.