【发布时间】:2015-12-13 14:49:44
【问题描述】:
所以我有一个简单的功能以及一些文档:
/**
* @param[out] dest is overwritten by the second argument
* @param[in] src is value to overwrite the first argument with
*/
void Copy(int &dest, int src) { dest = src; }
可能不是很有用,但很明显dest 是输出。但是,由于使用指针,这条线对我来说变得模糊:
void Copy(int *dest, int src) { *dest = src; }
dest 应该仍然是输出吗?指针的值不会被修改,只有它指向的内存中的值会被修改。但我仍然会说可能是的。继续:
void Write(FILE *fw, int src) { fwrite(&src, sizeof(src), 1, fw); }
现在这对我来说真的很可疑,我会将fw 标记为输入,尽管它在逻辑上是一个输出,而且FILE 结构的内容将在此过程中被修改(但那个非常不透明给我)。
另一方面:
void Open(FILE &*fw, const char *filename) { fw = fopen(filename, "w"); }
显然是输出。 FILE句柄被函数初始化,指针的值被覆盖。
将参数标记为输出是否有良好的经验法则或推理?
我什至不想像 C++ 那样进入[in,out] 参数,这些基本上都是[out] 参数(例如,如果通过std::vector 传递输出,函数需要获取一个实例作为输入并且输出甚至可以重用存储)。
【问题讨论】: