VS2008传递变量 - struct vs struct components - 优点/缺点?

时间:2011-06-21 19:30:48

标签: c++ visual-studio-2008 struct parameter-passing

我真的希望这不是那些超级基本问题之一。

无论如何,我有一个包含47个组件的结构,我正在调用各种函数,这些函数可以同时使用3到10个组件。

调用这个函数更好吗:
foo(pParam->variable1, pParam->variable2, pParam->variable3)
 或foo(pParam)然后在函数中使用pParam->variable1; pParam->variable2; pParam->variable3;

提前致谢!

3 个答案:

答案 0 :(得分:3)

您应该通过引用传递结构,这样您就不需要复制所有值:

void foo(mySturct pParam); //Here the struct will be copy constructed.. relatively large overhead

void foo(Val1 param1, Val2 param2, Val3 param3); // 3 parameters passed by value, the value will be copied.

void foo(mySturct &pParam); //Only the reference to the structure is passed. Single pointer size value is passed.

在一般结构中,您可以将数据联合起来。因此将它拆开并将不同的参数传递给函数是没有意义的 它应该作为一个整体保留。

答案 1 :(得分:3)

我一直处于类似情况。分别传递每个组件。这使得调用者可以清楚地知道哪些值是必需的,并且它使实现者明白哪些值是可用的。

如果你传递整个结构,那么调用者将不确定他们真正需要填充多少结构。更糟糕的是,函数实现者可能会开始引用另一个并不总是可用的结构成员,或者并不总是有效。

您在维护期间可能会看到的另一件事是某些未使用的结构成员可能重载以传递之前未预期的新参数,并且字段名称将不再与它们表示的值匹配

分别传递所有参数使每个人都明白合同的真正含义,并且明确添加新参数。

答案 2 :(得分:2)

我认为最好多考虑一下这个架构。具有47个属性的结构,传递给不使用所有这些属性的各种函数,看起来像Anemic Domain Model。您应该将其拆分为类,每个类包含仅适用于类中数据的方法。这样你就可以避免传递struct(你可以通过类免费获得它)以及扩展程序的问题。