トップページ > プログラム > 2015年12月30日 > K47H7mbU

書き込み順位&時間帯一覧

7 位/166 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000020200000000004



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
C++相談室 part121 [無断転載禁止]©2ch.net

書き込みレス一覧

C++相談室 part121 [無断転載禁止]©2ch.net
575 :デフォルトの名無しさん[sage]:2015/12/30(水) 11:55:34.57 ID:K47H7mbU
>>565
できれば関数の戻り値等も一時拘束無しで、インラインで記述したいのです。
String a = validate(buildString("a"));
String b = validate(buildString("b"));

色々試しましたが、どうしても戻り値の代入タイミングでなにかしらのアクションが必要になるようです。

String str = validate(String("")); // 代入時Stringのコピーコンストラクタが呼ばれてしまう
String &&str = validate(String("")); // 同じ参照が渡るが代入時にデストラクタが呼ばれてしまう
C++相談室 part121 [無断転載禁止]©2ch.net
576 :デフォルトの名無しさん[sage]:2015/12/30(水) 11:59:27.37 ID:K47H7mbU
結局、右辺値を左辺値として返すことは出来ないのではないかと理解しています。
右辺値と左辺値が同じアドレスの物であることを保証する仕組みがあれば、実現は可能なのかもしれません。
C++相談室 part121 [無断転載禁止]©2ch.net
583 :デフォルトの名無しさん[sage]:2015/12/30(水) 13:29:51.94 ID:K47H7mbU
>>554です。
出来ればワンラインで記述する方法を見つけたかったのですが、もともとの目的は処理の高速化であったため、
>>578>>565さんの方法もしくは当初の参照を使う方法を採用することにします。

String &&s = String("");
String &&str = validate(std::move(s));
&s == &str // true
C++相談室 part121 [無断転載禁止]©2ch.net
586 :デフォルトの名無しさん[sage]:2015/12/30(水) 13:59:44.67 ID:K47H7mbU
ご指摘ありがとうございます。
参照を用いた本来の方法が一番よさそうですね。

String &validate(String &s) {
 return s;
}

String s = String("");
String &str = validate(s);
&s == &str; // true


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。