什么时候在c ++中使用out参数?

时间:2019-04-01 13:04:45

标签: c++

说我的成员函数需要同时返回std::vector<std::pair<MyClass,double>>double。两者都作为同一算法的一部分进行计算:我需要它们都从 same 成员函数返回。 (即,我不能轻易拥有两个单独的功能;这将需要重复的代码和性能开销。)

我读到最好避免使用参数in these quidelines,即:

  

F.20:对于“输出”输出值,更喜欢返回值来输出   参数。

所以我的代码如下:

 std::pair<std::vector<std::pair<MyClass,double>>,double> 
                       computeTransitionsAndCost(double input); 

std::pair<MyClass,double>是一个过渡,因此是名称。)

如果没有参数,则为

 std::vector<std::pair<MyClass,double>> computeTransitions(double input, double& costOut); 

在后面的代码中,用户更清楚该函数返回什么:对列表。但是该指南对此表示反对,因为

  

返回值是自记录的,而&可以是内出也可以是外出,并且容易被误用。

是否有任何方法可以遵循准则,并且仍然确保代码的用户清楚返回值代表什么?

1 个答案:

答案 0 :(得分:3)

为什么不返回如下所示的组合?

struct ComputedTransitions
{
    struct Transition
    {
        MyClass description;
        double weight;
    };
    std::vector<Transition> transitions;
    double cost;
};

ComputedTransitions computeTransitions(double input);

这将使您俩都为返回值的元素赋予有意义的名称,并将所有相关数据放入一个结构中。