C++ 编程(by ref & by val 的优点)查询? / 除 byRef 之外的编辑结构的方法

C++ Programming ( advantages of by ref & by val) query? / methods of editing struct other than byRef

我正在复习复习模拟考试,试卷上有一个问题让我感到困惑。

Q.)应用程序需要将结构传递给函数,这将修改结构的内容,以便在 return 从函数调用调用者可以使用新的结构值。你会按值、地址或引用将结构传递给函数吗?

清楚说明您选择特定方法的原因。通过比较三种方法来证明您的选择。

现在我很难理解这一点,因为我假设问题的最佳答案始终是 Ref,因为它采用值的引用指针并编辑其内容,而不仅仅是获取副本。如果使用基于 class 的程序,情况会有所不同。

我能理解的唯一其他方法是拥有一个单独的值并获取和设置值,但这意味着额外的代码行,我有点不确定这意味着什么,谁能帮助启发我?我不知道任何其他方法可以实现这一目标。

这不是"advanced programming";它是 C++ 的绝对基础。

对于任何给定的用例,return-by-value 或 "out" 参数(使用引用或指针实现)是否 "best" 取决于许多因素,风格和意见只是其中的两个他们。

// Return by value
//  T a; a = foo(a);
T foo(const T& in)   // or:   T foo(T in)
{                    //       {
   T out = in;       // 
   out.x = y;        //          in.x = y;
   return out;       //          return in;
}                    //       }

// Out parameter (reference)
//  T a; foo(a);
void bar(T& in)
{
   in.x = y;
}

// Out parameter (pointer)
//  T a; foo(&a);
void baz(T* in)
{
   in->x = y;
}

问题是问你这三种方法的优缺点。