問題タブ [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 に答える
284 参照

c++ - C++ での参照の転送とコンストラクターの変換

左辺値と右辺値の両方の文字列引数を参照によって受け取り、大文字に変換して標準出力に出力する関数を作成するとします。

これは次のようにうまく動作します:

ただし、冗長性を避けるために、代わりに転送参照を使用したいと思います。

残念ながら、upper_print文字列リテラル引数で呼び出すことはできません。

または などを使用して、引数をstd::stringオブジェクトに制限する可能性があることを認識しています。しかし、ここでは役に立ちません。std::enable_ifstatic_assert

この意味で参照の転送とコンストラクターの変換の機能を組み合わせるオプションはありますか?

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

c++ - リテラルを const ref パラメーターとして渡す

次の単純化されたコードを想像してください。

(1) 最適化はさておき、42 が に渡されるとどうなりfooますか?

コンパイラは 42 をどこかに (スタック上の?) 貼り付けて、そのアドレスを に渡しますfooか?

(1a) この状況で何をすべきかを指示する標準に何かありますか (または厳密にはコンパイラ次第ですか)?


ここで、少し異なるコードを想像してください。

私が定義しない限り、リンクしませんint bar::baz;(ODRのため?)。

(2) ODR 以外に、上記の 42 で行ったことをコンパイラーが実行できないのはなぜですか?


単純化する明白な方法は、次のように定義することですfoo

ただし、テンプレートの場合はどうすればよいでしょうか。例えば:

(3)プリミティブ型を値でfoo受け入れるように指示するエレガントな方法はありますか? xそれとも、SFINAEなどで特化する必要がありますか?

編集foo:この質問とは無関係であるため、内部で何が起こるかを変更しました。