問題タブ [ref-qualifier]

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 投票する
1 に答える
545 参照

c++ - メンバー関数の cv-ref-qualifier の転送

(メンバー) 関数 templateの別のオーバーロード (f(T &)または など)がない場合、はいわゆる転送参照であり、cv 修飾型の、 またはのいずれかです。しかし、メンバー関数のcv-ref-qualifiersにはそのような規則はありません。has always 右辺値参照修飾子。f(volatile T &&)template< typename T > f(T &&);T &&TUU &Ustruct S { void f() && { ; } };S::f()

volatile一般的なコードでは、すべてのメンバー関数が一般的に同じことを行う場合に、メンバー関数の 4 つ (または修飾子も考慮すると 8 つ) のオーバーロードの定義を避けることが非常に便利です。

この方法で発生するもう 1 つの問題は、特定の意味で有効なcv-ref-qualifierを定義することが不可能であるということです。次のコードでは、メンバー関数のref-qualifierがofである*thisかどうかを判断できません。operator ()&&&

しかし、上記の構文があれば、とてもいいでしょう。つまり、 のdecltype((*this))正確なcv-ref 修飾型を示し*thisます。私の考えでは、 C++標準の今後のバージョンにこのような構文を導入することは、重大な変更ではありません。しかし&&cv-ref-qualifier の転送は (そして、委員会 (つまり、コア言語ワーキング グループ) の省略のように見えます)。

メンバー関数cv-ref-qualifiercv-ref-qualified型の両方*thisをその本体に示す別のシーケンスが可能です:auto &&などdecltype(&&)

C++17で使用するために準備された、この問題に関する提案はありますか?

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

c++ - 参照修飾子と削除されたメンバー メソッド

次のコードを検討してください。

もちろん、メンバーメソッドをオーバーロードできないと言ってコンパイルしません。もちろん、それは理にかなっています。

反対側では、次のコードがコンパイルされます。

それは法規ですか?
同じクラス内で 2 つの完全に異なるインターフェイスを定義することは可能ではないでしょうか。前者は左辺値で使用され、後者は右辺値で使用されますか?
それがあまり意味をなさないという事実は別として、それは本当に私を傷つけます. 削除された関数は、左辺値の場合にのみ削除する
のではなく、全体として削除するべきではありませんか? この機能の目的は何ですか? それは古典的な目立たないコーナーケースですか、それとも私には見えない何かがありますか?

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

c++ - ref 修飾メンバーのテンプレート インスタンス化のエラー

別のコンパイル (*.hh、*.cc、*.ie、およびメイン) に分割しようとする場合を除いて、コードは実行されます。(コメントアウトされた) ステートメントは、コンパイラ ICE を発行します。

インスタンス化の構文に問題はありません。誰かがこれについて私を助けてくれませんか...

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

c++ - 末尾の戻り型、declval、および参照修飾子: 一緒に機能しますか?

次の例を検討してください。

B(行) で呼び出されると、コードは、特定のケースで右辺値参照型に変換する(*)ためにコンパイルされなくなります。 次のように少し変更すると、逆の問題が発生します。std::declvalT

現在、特定のケースで型を左辺値参照型に変換する(*)ための行は機能しません。std::declval

参照修飾子に関係なくT、メンバー function がある場合に型を受け入れる式を定義する方法はありますか?f


私はそれを使用する実際のケースはなく、実際の使用例を作成することはできません.
この質問は好奇心のためであり、それ以上のものではありません。ref-qualifier
がある 場合には理由があることを理解しており、クラスの設計を壊そうとするべきではありません。

0 投票する
0 に答える
122 参照

c++ - メンバー関数の完全転送と参照修飾子

C++11 では、メンバー関数を参照修飾する機能と、完全な転送が導入されました。しかし、それらを混ぜ合わせることはできますか?

この(実際の)例を考えてみましょう:

内部main()では、最初の呼び出しでバージョン 1 または が呼び出さbar::do_stuff()れ、2 番目の呼び出しでバージョン 2 または が呼び出されますbar::do_stuff()。にコードの重複がありますfoo::do_stuff()。ref-qualifiers が暗黙の 以外の引数用である場合、*this完全な転送を簡単に行うことができます。

*thisオブジェクトを完全に転送する同等の方法はありますか?

注: 適切な解決策が C++14 または C++17 にのみ存在する場合は、私も知りたいです。

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

c++ - r-value ref-qualified メソッドから移動するか、移動しないか?

次の C++11+ コードでは、どの return ステートメントの構造を優先する必要がありますか?

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

c++ - r-value ref-qualified メソッドから r-value 参照を返すことは良い習慣ですか?

私が見ることができるように、一般的なルールは、関数から r 値参照をまったく返さないことです (まれな特殊なケースを除く)。しかし、クラス メソッドはどうでしょうか。

std::optional<T>::operator*()C++ 標準ライブラリには、クラスの右辺値参照修飾メソッド (およびクラスstd::optional<T>::value()のメソッド) から右辺値参照を返す例がありますstd::optional<T>。C++17 標準のセクション23.6.3 Class template optional [optional.optional]および23.6.3.5 Observers [optional.observe]を参照してください。