什么是forms参数?
在C ++中进行编译时,我经常会遇到处理“forms参数”的错误消息,例如
error C2719: 'b': formal parameter with __declspec(align('16')) won't be aligned
我确实理解错误,以及b
是我定义的函数的参数这一事实。
但是,参数是正式的是什么意思? 还有非正式参数吗?
我注意到术语“forms参数”也出现在其他语言中,所以我认为它是一个更通用的术语,不一定特定于C族语言? 某些语言子集是否支持非正式参数?
看到答案后,最后一个问题:那些名称forms参数和实际参数来自何处? 它是源于C标准,还是在某些抽象语言演算中调用它的效果?
有正式和实际参数:
void foo(int arg); //arg is a formal parameter int main() { int val = 1; foo(val); //val is an actual parameter }
从C ++标准 :
1.3.1forms参数(参数)
声明为函数声明或定义的一部分的对象或引用,或者在exception处理程序的catch子句中声明的对象或引用,它在函数或处理程序的入口处获取值; 逗号分隔列表中的标识符,该列表由紧跟在函数式宏定义中的宏名称后面的括号限定; 或模板参数。 参数也称为forms参数或forms参数。
1.3.10实际参数(参数)
逗号分隔列表中的表达式,由函数调用表达式中的括号限定,逗号分隔列表中的预处理标记序列由函数式宏调用中的括号,throw的操作数或表达式限定,逗号分隔列表中的type-id或template-name,由模板实例化中的尖括号限定。 也称为实际参数或实际参数。
forms参数是函数定义中已知的参数。 实际参数是您在调用它时实际 (因此名称)传递给函数的参数。
void foo( int a ); // a is a formal parameter foo(10); // 10 is the actual parameter
这是一个对术语有点迂腐的问题,但非常有用:forms参数就是你想到的函数参数:
int foo(bool a, float b);
这里a
和b
是forms参数。 关键在于,在函数体中,您“正式”引用这些参数而不实际知道它们的值。 只有在您实际评估函数调用表达式时 ,才会将forms函数参数绑定到函数调用参数:
int result = foo(false, 1.5);
在此调用表达式中,第一个参数的值false
绑定到forms参数a
,类似于第二个参数。
参数和参数之间的区别对于语言设计者和编译器编写者来说可能更为重要,但作为C ++中的一个例子,当您尝试遵循模板参数推导规则时,了解这一点非常有帮助。