- 744 名前:名前は開発中のものです。 mailto:sage [2009/07/18(土) 14:09:33 ID:xlxZEQtn]
- インスタンスが確保されてる状態なら、参照を返せばいい。
class Foo { Pos pos_; public: Pos& GetPos() { return pos_; } const Pos& GetPos() const { return pos_; } }; スコープの外側にインスタンスを返すなら、参照渡しじゃ無理なので、コンパイラの NRVOに期待して、例えば以下のように書くことになる。 inline Pos GetPos() { Pos result; /* code */ return result; } NRVO非対応でRVOだけ対応のコンパイラだと、 inline Pos GetPos() { /* code */ return Pos( /* code */ ); } こういうコードじゃないと>>741の言うような最適化は掛からない。 コンパイラーメーカーもC++標準化委員会もNRVOが掛かるように頑張ってるはずだが、 実装状況はコンパイラによってまちまちなんで調べてくれ。多分検索すればすぐ分かる。 VC++なら2005からNRVO行けるっぽい。/O1くらいでもNRVOは掛かる模様。 プロファイラで後から最適化ってのも常道だけど、I/F設計段階の話はそうもいかないし なぁ。 まぁ、俺なら基本的には参照渡し、リターンで解体される自動変数なら値渡しで返して、 後者がボトルネックになるならインライン化でたぶんNRVO発動でおk、って書く。で、 「この設計だと遅そうだしポインタ渡そう」って言われたら、実際どうなるか興味ある んでベンチでも書いたり、ついでに↓みたいなのも一緒に見たりしながら相談する。 msdn.microsoft.com/en-us/library/ms364057(VS.80).aspx
|

|