我最近决定整理一个头文件,它有很多这样的定义:
// 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);
只是优化器决定在哪里复制,还是标准对此有任何说明?