パラメーターが非効率的な方法で渡されています。
C/C++ では、パラメーターは値渡しです。つまり、呼び出しでは、実際のパラメーターの内容が仮パラメーターにコピー (代入) されます。パラメーターが大きい場合、このコピーにはコストがかかります。通常、16 バイトを超える引数は参照渡しにしたほうが良いでしょう。つまり、オブジェクト自体を渡すのではなく、オブジェクトへのポインターを渡します。
C++ では、仮パラメーター型 T を T& に置換して REF パラメーターを宣言できます。呼び出し引数とサブルーチン本体を変更する必要はありません。C では、次のように値渡しから参照渡しに変更できます: 型 T の代わりに T* としてパラメーターを宣言し、仮パラメーター "x" をすべて "(*x)" に置換して、各呼び出しで対応する引数 V をそのアドレスである &V に置換します。
警告: 参照渡しの引数は、呼び出されたルーチンが参照パラメーターを変更すると、変更されます。値渡しから参照渡しに変更する前に、仮パラメーターへの代入がないことを確認してください。
ID |
問題箇所 |
説明 |
---|---|---|
1 |
定義 |
関数が定義された場所 |
typedef struct { int x[10]; } T; int add_up(T p) { // Better is int add_up(T &p) int i, total = 0; for (i = 0; i < 10; i++) { total += p.x[i]; } return total; }
© 2010 Intel Corporation. 無断での引用、転載を禁じます。