問題タブ [universal-reference]
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++ - ユニバーサル参照はトップレベルの cv 修飾子を無視します
ユニバーサル参照がトップレベルの cv 資格を失う理由を誰か教えてもらえますか? 次のコードの 2 番目と 3 番目の関数呼び出しで、出力が const に対して true を返すと予想しました。
出力:
c++ - T&& および const T& オーバーロードを指定すると、const 左辺値が const 右辺値とは異なる方法でバインドされるのはなぜですか?
このコード ( http://ideone.com/Mo7fQrで入手可能)
への最初の呼び出しf
(左辺値を使用) はconst T&
オーバーロードを呼び出し、2 番目の呼び出し (右辺値を使用) はT&&
オーバーロードを呼び出します。少なくとも、gcc 4.8.1 と最新の VC++ (VC12) ではそうです。
2 番目の呼び出しがこのように解決される理由を理解していると思います。最初のテンプレートはパラメーターを取得するようにインスタンス化されconst int&
ますが、2 番目のテンプレートはconst int&&
パラメーターを取得するようにインスタンス化されます。呼び出しサイトで渡される引数は右辺値であるため、優先的にバインドされます。右辺値参照。(これは、C++11 標準の 13.3.3.2/3 の箇条書き 1 のサブ箇条書き 4 で指定されていると思います。)
しかし、 への最初の呼び出しではf
、両方のテンプレートがタイプ のパラメータを取るようにインスタンス化しますconst int&
。const
では、左辺値が渡されたときに最初のテンプレートが優先されるのはなぜですか?
c++ - コンストラクターのユニバーサル参照が原因で失敗し、呼び出し可能なファンクターを std::function に割り当てることができません
次の完全なテスト ケースでは、最初の ctor を使用してファンクターを値で取得し、それを所定の位置に移動すると、コードがコンパイルされ、期待どおりに動作します。
ただし、ユニバーサル参照 ctor を使用すると、コンパイルに失敗します (以下に clang エラー メッセージを含めました)。
どうすればこれを修正できますか、または何が間違っていますか?
コンパイル エラー:
templates - 他の型推論なしでユニバーサル参照を使用する方法
タイプ inner_t のクラスのラッパー クラスを作成しています。次の方法で、内部クラスの適切なコンストラクター (左辺値参照または右辺値参照) を呼び出すことができますか?
c++ - 関数テンプレートのパラメーター T& と T&& はあいまいですか?
次の 2 つのオーバーロードを検討してください。
それらは潜在的にあいまいですか?
次のコードは Clang 3.4 でコンパイルされますが、GCC 4.8 では失敗します。これは、オーバーロード (最初のものはT = int
、次のものはT = int&
) があいまいであることを示しています。
「参照へのバインディング」はオーバーロード解決の点で「完全一致」であることを認識しているため、問題は、推論の1つが他のものよりも好ましいかどうか、またはそれらが同等に優れているかどうかに帰着すると思いT = int
ますT = int&
。