我最近決定要整理頭文件,它有像這樣有很多的定義:C++確實內聯函數強制其參數被複制?
// 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++ do inline functions prevent copying?」的答案似乎暗示不會進行復制操作,這個問題就會出現:
如果內聯不會複製函數的參數,以後就不會了嚴重的行爲之後?
inline void change_value(int i) {
i++;
}
...
int x=5;
change_value(x);
assert(x==5);
是它只是決定在哪裏複製或沒有,或不標準要說的就是這些東西的優化?
注意:聲明模板函數內聯是多餘的。 – Aleph 2013-04-25 16:47:11
@AnotherTest真的嗎?我只是假設只有在有相關電話發出時纔會產生,而不是在線產生。但是聲明內聯任何東西當然不是硬性和快速的保證,所以也許這就是爲什麼? – 2013-04-25 16:50:17
函數內聯時,必須保持調用的語義。也就是說,對「按值」參數的修改不會反映回「調用者」。 – 2013-04-25 16:50:30