- 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
|