【问题标题】:C++ Programming ( advantages of by ref & by val) query? / methods of editing struct other than byRefC++ 编程(by ref & by val 的优点)查询? / byRef以外的结构体编辑方法
【发布时间】:2016-01-18 14:02:56
【问题描述】:

我正在为我的考试复习一次模拟考试,纸上的一个问题让我感到困惑。

问。)应用程序需要将结构传递给函数,该函数将修改结构的内容,以便在从函数调用返回时,调用者可以使用新的结构值。你会通过值、地址或引用将结构传递给函数吗?

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

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

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

【问题讨论】:

  • 什么是“引用指针”?
  • 至少有两个给定的替代方案可以实现这一点。我建议您更多地研究提到的三种方法,直到您可以自信地回答这个问题。 (不幸的是,答案在某种程度上是一个品味问题,所以正确答案取决于你的老师。)
  • 行话注释:“值的引用指针”应该是“对对象的引用”。没有“引用指针”,你不能指向或引用一个值。正确使用术语很重要,否则您最终会回答错误的问题或误解它。
  • 感谢您的澄清。

标签: c++ byref byval


【解决方案1】:

这不是“高级编程”;它是 C++ 的绝对基础。

对于任何给定的用例,按值返回或“输出”参数(使用引用或指针实现)是否“最佳”取决于许多因素,风格和意见只是其中两个。

// 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;
}

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

【讨论】:

  • 这是我们大学所说的模块,他们的意思是它比一年级的主要是算法的编程模块更上一层楼。
猜你喜欢
  • 2011-06-15
  • 2017-08-10
  • 2012-12-31
  • 2011-08-29
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多