有没有办法在函数参数中记录输出?

时间:2015-02-24 23:00:37

标签: c++

假设我有一个功能

void doStuff(vector<int> &a, int b, vector<int> &c> {
    c = vector<int>(a.size());
    for (int i = 0; i < a.size(); i++) {
        c[i] = a[i] + b;
    }
}
显然,在看到这个功能后,我们知道“c”是输出。

对于任何没有看过功能定义的人来说,除非我给c命名为“output_c”,否则它仍然是个谜。也许我只是静脉但我不喜欢命名“ouput_xxx”,是否有任何语法糖果让该功能的用户知道它应该是输出?

2 个答案:

答案 0 :(得分:2)

语法本身可以指示哪一个是输入参数,哪一个是输出参数。但是,输出参数也可以用作输入参数。你只能通过查看签名来判断它。

示例:

int foo(int arg); // The argument is copy by value. It can only be an input argument.

void foo(std::vector<int> const& arg); // The argument is by const&.
                                       // It can only be an input argument.

void foo(std::vector<int>& arg); // The argument is by &. It can be:
                                 // 1) an output argument.
                                 // 2) an input and output argument.
                                 // 3) an input argument (bad practice)

答案 1 :(得分:1)

您可以添加预处理程序指令:

#define OUT 

并将其放在参数列表中,如下所示:

void doStuff(vector<int> &a, int b, OUT vector<int> &c) ...

我想我见过一些API就是这样做的。这样,它在函数签名中明确声明,但您不必修改变量名称。代码在编译时也没有改变,因为OUT没有被定义为任何东西,它只是一个定义的符号。

我认为,在编写函数和/或按值返回时,我会依赖于您自己的文档,而不是像这样做。您还可以使用const关键字来标记保证不会更改的参数 - 这就是语法的设计目的。