【问题标题】:When to use variable/reference parameters as an output?何时使用变量/参考参数作为输出?
【发布时间】:2014-11-03 05:00:21
【问题描述】:

我应该使用函数的参数作为输出吗?如果有,什么时候? 我见过一些 WinAPI 函数这样做,我不明白这是什么原因。

    LARGE_INTEGER c;
    QueryPerformanceCounter(&c);
    ...
    QueryPerformanceCounter(&c);

为什么在下面的代码看似会做同样的事情时使用引用? (假设函数只是返回结果)

    LARGE_INTEGER c = QueryPerformanceCounter();
    ...
    c = QueryPerformanceCounter();

【问题讨论】:

    标签: c++ variables parameters reference output


    【解决方案1】:

    有时这是因为(过时的)担心按值返回较大对象的效率,但在这种情况下,我认为原因是允许将返回值用作指示调用是否成功的状态.

    【讨论】:

    • 所以是因为效率?我有一个函数返回一个长度超过 200 万的数组(纯图像数据)。使用引用而不是返回值会有好处吗?
    • @John:在某些情况下,将对象传递给函数可以让您重用存储,这可以减少分配和释放时间。在性能方面,最好进行衡量。几乎没有硬性规定。
    【解决方案2】:

    如果您想从函数返回错误以验证输出,这将非常有用:

    std::string input;
    
    if(!read_device(input))
    {
        log("ERROR: reading device:");
        return false;
    }
    
    // input is valid here
    

    【讨论】:

    • 这几乎可以肯定是对 Win32 函数的解释。它们遵循返回值指示成功或失败的约定(极少数例外)
    猜你喜欢
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多