私は最近、次のような多くの定義を持つヘッダー ファイルを整理することにしました。
// api.h
template< typename T>
inline void func( T param )
{
// stuff here
}
だから私はそれを次のように変えることを考えました:
// api.h
#include "api_details.h"
template< typename T>
inline void func( T param )
{
return details::func( param );
}
// api_details.h
namespace details {
template< typename T>
inline void func( T param )
{
// stuff here
}
}
inline
私が実行している余分なコピーにコストがかからないことを願っています.
' C++ の答えはインライン関数のコピーを防ぎますか? ' はコピーが行われないことを暗示しているように思われますが、次の疑問が生じます。
インライン化が関数パラメーターをコピーしない場合、次の動作は悪くないでしょうか?
inline void change_value( int i ) {
i++;
}
...
int x=5;
change_value(x);
assert(x==5);
どこにコピーするかを決定するのはオプティマイザだけですか、それとも標準はそれについて何かを言っていますか?