【问题标题】:What's the correct term for returning something as an out parameter?将某些东西作为输出参数返回的正确术语是什么?
【发布时间】:2012-02-06 10:34:08
【问题描述】:

我希望这个问题是主题。

我在进行代码审查时偶然发现了以下功能:

bool SomeFunc(std::string& o_xxx, char& o_yyy);

该函数用于通过out参数获取某个类的xxxyyy的值。

cmets(后来用于自动文档)说:

...这个函数通过引用返回[xxx]和[yyy]...

显然,该函数返回一个布尔值,指示成功或失败。所以上面那句话需要改写。但是怎么做?什么是正确的术语(如果有的话)通过输出参数返回某些东西,或者换句话说,填充通过引用传递的参数?

这个问题被标记为与语言无关,因为它不是 C++ 特定的。但它也被标记为 C++,因为该示例是用 C++ 编写的。

【问题讨论】:

  • 我通常会说“函数返回一个指示成功或失败的值。如果成功,o_xxx 将具有 [xxx] 的值,o_yyy 将具有值[yyy]。如果失败,参数不变。"。
  • 有时会使用输出参数,因为要返回的参数不止一个。如果将它们组合成一个类,则可以只返回一个实例。有时输出参数用于提高效率。最后,你为什么要传递数据?封装:告诉,不要问!
  • @R.MartinhoFernandes:“在失败的情况下,参数不变” - 请注意,这是一个强有力的例外保证。因此,如果您这么说,请务必在分配给o_yyy 的函数之前 中分配给o_xxx,因为字符串分配可能会失败。或者使用交换。
  • @SteveJessop 哦,当然。或者,如果提供这样的保证并不容易,您可以只说“(...)参数将具有未指定的值”。

标签: c++ language-agnostic terminology out-parameters


【解决方案1】:

"成功后,SomeFunc 将值存储在o_xxxo_yyy 中..."; stores in 是 Linux 手册页 strtoul(3) 如何描述该函数使用其 endptr 参数所做的事情。

虽然我也经常听到带有引用类型输出参数的短语“return in”。

【讨论】:

  • 谢谢!有道理,我喜欢!
【解决方案2】:

简单来说:

函数SomeFunc() 可以 修改参数xxx(std::string)yyy(char) 并返回成功或失败 (bool)。

【讨论】:

  • 请注意,这不是(在 .NET 术语中)ref 参数。这是一个out 参数
【解决方案3】:

考虑 MSDN 方式。 Example.

返回值在其自己的部分中描述。
输出参数的操作在其各自的部分中进行了描述,并且可以选择在“返回值”部分中重复。

【讨论】:

    【解决方案4】:

    如果您使用的是 doxygen,则可以这样做:

    /**
     *- Description : This function ...
     *
     * @param[out] xxx ...
     * @param[out] yyy ...
     *
     * @return true for ..., false otherwise
     *
     ***********************************************************************/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 2013-01-26
      相关资源
      最近更新 更多