DXライブラリ 総合スレッド その3
■ このスレッドは過去ログ倉庫に格納されています
0744名前は開発中のものです。
2009/07/18(土) 14:09:33ID:xlxZEQtnclass 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、って書く。で、
「この設計だと遅そうだしポインタ渡そう」って言われたら、実際どうなるか興味ある
んでベンチでも書いたり、ついでに↓みたいなのも一緒に見たりしながら相談する。
http://msdn.microsoft.com/en-us/library/ms364057(VS.80).aspx
■ このスレッドは過去ログ倉庫に格納されています