問題タブ [forwarding-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.

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

c++ - 関数テンプレート演繹左辺値参照とユニバーサル参照

私が機能を持っているとしましょうcopy

input_bufferはユニバーサル参照でありoutput_buffer、左辺値参照です。

Reference collapsing rulesinput_buffer確かに、の推定型に関係なくBuf、ユニバーサル参照であり、実際には左辺値参照であることを確認してoutput_bufferください。

Bufしかし、ここでどのように型が推定されるのだろうか。

copyr-value as が渡されることがわかりましたinput_buffer(および l-value as output_buffer、明らかに)Bufは非参照型です。

ただし、2 つの左辺値を渡すと、プログラムはコンパイルされません。

コンパイラBufint&. input_buffer参照の折りたたみ規則に従って、左辺値参照、つまり になり、左辺値参照にもなる& + && -> &ことを期待しoutput_bufferます。& + & -> &.

問題は、このコードがコンパイルされないのはなぜですか?

(注: 私は必ずしも問題の解決策を求めているわけではありませんが、説明を求めています。)

詳しく説明する必要がある場合は、お気軽にお尋ねください。

編集: 呼び出しの場合: copy(i, j); GNU GCC コンパイラが与える: エラー: 'copy(int&, int&)' の呼び出しに一致する関数がありません 注: 候補: テンプレート void copy(Buf&&, buf&) 注: テンプレート引数の推定/置換に失敗しました: 注: 推定パラメータ 'Buf' のタイプが競合しています ('int&' と 'int')

電話の場合: copy<int&>(i, j); OK。

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

c++ - 転送参照はまだ右辺値参照ですか?

移動と転送をサポートするために考案されたルールに、いまだに混乱しています。私がまだ確信していないことの1つは、次のとおりです。

転送参照は単なる右辺値参照ですか (参照折りたたみルールが適用されます)?

右辺値参照の場合、関数は次のようになります。

右辺値だけでなく左辺値も受け入れますか?