已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。
3天前关闭。
Improve this question
如果一个函数有很多不同类型的参数,那么将这些参数聚集到一个结构体中会有什么不同吗?
bool DoSomething(int a, float b, complex<double> c, someDataType* ptrData, bool someBool);
对比
struct PackedArguments{
int a;
float b;
complex<double> c;
someDataType* ptrData;
bool someBool;
}
bool DoSomething(const PackedArguments& args);
1条答案
按热度按时间tyg4sfes1#
正如杰森·利亚姆所说:“在第二种情况下,您使用的是按引用传递,而在第一种情况下,您使用的是按值传递。”
就效率而言,这并不重要,因为在这两种情况下,你都在收集参数,无论是在函数调用还是在结构调用期间。如果先调用结构可能会稍微占用内存,因为你在结构内部的新变量中临时存储所有这些参数,而不是在参数内部的函数调用中立即调用/检索它们。
函数不会关心它的参数是如何被接收的,只要它们被接收到就行。你想达到什么更重要。传值传递可能更健壮,更容易混淆,是传递参数的基本方式。传引用传递仍然是一种好方法,有更多的应用。所以最终它取决于你想达到什么。
通过引用传递参数的优点是函数可以通过该参数向调用代码返回一个值。通过值传递参数的优点是它保护变量不被函数改变。因为如果你传递了引用,你就直接改变了函数作用域之外的值,这有它的好处,而且变量更少(RAM更少),但如果您不知道自己在做什么,则会有风险。