在structpass_1
您的结构中是按值anup1
传递的,因此完成了本地副本并将其传递给函数。
相反,在structpass_2
结构中被传递by reference
,即指向结构实例的指针被传递给函数(你有指针语义但值语法)。没有完成整个结构的本地副本。
请注意,对于仅包含一个通过值或引用传递的整数的简单结构,从性能角度来看是相同的。但是当您拥有更复杂(更大)的数据时,通过引用传递会更有效。
按值传递与按引用传递的两种情况之间的一个重要区别是,如果您在函数体内修改结构实例,则只有通过引用传递结构时,修改才会在调用站点持久化。相反,当您按值传递结构时,由于在函数体内完成了本地复制,因此在函数退出时修改会丢失。例如:
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)
}