structpass_1
あなたの構造ではvalueanup1
で渡されるので、ローカルコピーが行われて関数に渡されます。
代わりに、 in structpass_2
the structure is passed by reference
、つまり、構造体インスタンスへのポインターが関数に渡されます (ポインターのセマンティックですが、値の構文があります)。構造全体のローカル コピーは行われません。
1 つの整数のみを含む単純な構造の場合、値渡しまたは参照渡しはパフォーマンスの観点から同じであることに注意してください。しかし、より複雑な (そしてより大きな) データがある場合は、参照渡しの方が効率的です。
値による受け渡しと参照による受け渡しの 2 つのケースの重要な違いは、関数本体内の構造体インスタンスを変更する場合、構造体が参照によって渡される場合にのみ、変更が呼び出しサイトで永続化されることです。代わりに、構造体を値で渡すと、ローカル コピーが関数本体内で行われるため、関数が終了すると変更が失われます。例えば:
void structpass_1(anup1 b) // pass by value
{
cout << b.a << '\n';
b.a++; // modification lost at the call site
};
void structpass_2(anup1& b) // pass by reference
{
cout << b.a << '\n';
b.a++; // the caller will see the incremented value for b.a
};
int main()
{
anup1 a2;
a2.a = 100;
structpass_1(a2); // will print 100
structpass_2(a2); // will print 100
cout << a2.a; // willl print 101 (structure modified by structpass_2)
}