但在这种情况下,“pToMyStruct”为什么是一个输入输出参数?为什么它不仅是一个输入参数?作为一个没有经验的程序员,我如何容易地识别函数中的这3种类型的参数?例如,输入参数仅在其自己的函数中被修改。
我喜欢这个问题。也许回答需要更多的想法,但以下是一些基本想法:
- 想法1-形式参数不能被函数/方法修改,只能作为函数或方法的输入。
因此,“const T formalParam”显然是一个输入... const命令编译器如果函数试图修改const T formalParam则声明错误。
同样,“const T&formalParam”也是一种输入。有些人使用这种参数样式来提供对大型数据项的访问,同时避免复制的成本。
- 想法2 - 作为按值传递的形式参数的副本只能输入到函数或方法中。
因此在 "void foo(int t1);" 中,类型为int的形式参数t1是实际参数的一个副本。更改t1不会影响实际的int。该参数的行为就像是一个局部自动变量,其预先初始化为实际参数值的副本。
这也适用于传递类实例。所以在 "void foo (T t2)" 中,形式参数是某个实际参数的副本。同样,修改副本不会对原始对象产生影响,因此这只能作为输入。
- Idea 3 - 正式参数是指向现有实际参数的引用(或指针),如按引用传递(也许您可以说按指针传递),可以是输出或输入/输出参数。
因此,在“void foo(int& t1, char* label)”中,两个形式参数都可以是输出或输入/输出。您只能通过查看方法代码中如何使用形式参数来确定。
- 想法4- 当我刚开始学习C++时,我发现研究库函数很有启发性。以下是一些例子:
void* memcpy( void* dest, const void* src, size_t count );
int memcmp ( const void* lhs, const void* rhs, size_t count );
int isalpha( int ch );
size_type find( const basic_string& str, size_type pos = 0 ) const;
- 想法4 - 你的下一个工作可能会指定一种称为“编码标准”的输入输出和结果顺序。
我已经查阅了一些谷歌的编码标准,很容易找到。有关此主题的书籍也已出版。(研究努力:搜索C++编码标准或者C编码标准并进行评估。)
我更喜欢我的方法的返回值是一个“状态”,而不是方法或函数的结果。(状态意味着好或失败)因此,如果我的代码输出某些内容,则必须至少有1个输出参数,但是方法通常修改类实例的数据属性(而不是输出参数)。我通常将它们排列为:
T foo ( <input parameters> , <output parameters> );
T可以是任何具有简单和快速评估的类。最近,我使用了std :: string,当string.size()为0时,这意味着在函数执行期间没有错误。当大小为正时,字符串包含用于报告的错误消息。