跳至内容

Function Call

函数调用

如果某个之前未描述的名称出现在表达式中,并且后面跟着左括号,那么它就被视为函数的名称。

function_name (x1, x2,..., xn)

参数(形式参数)按值传递,即每个表达式 x1,…, xn 都会被计算,然后该值会被传递给函数。表达式的计算顺序和值的加载顺序并不保证。在执行过程中,系统会检查传递给函数的参数的数量和类型。这种调用函数的方式称为值调用。

函数调用是一个表达式,其值为函数返回的值。上述描述的函数类型必须与返回值的类型相匹配。函数可以在程序的全局范围中声明或描述,即在其他函数之外。函数不能在另一个函数内部声明或描述。

示例:

int start()
  {
   double some_array[4]={0.3, 1.4, 2.5, 3.6};
   double a=linfunc(some_array, 10.5, 8);
   //...
  }
double linfunc(double x[], double a, double b)
  {
   return (a*x[0] + b);
  }

在调用带有默认参数的函数时,可以限制要传递的参数列表,但不得早于第一个默认参数。

示例:

void somefunc(double init,
              double sec=0.0001, //set default values
              int level=10);
//...
somefunc();                      // Wrong call. The first parameter must be presented.
somefunc(3.14);                  // Correct call
somefunc(3.14,0.0002);           // Correct call
somefunc(3.14,0.0002,10);        // Correct call

调用函数时,不能跳过参数,即使是那些具有默认值的参数:

somefunc(3.14, , 10);           // Wrong call -> the second parameter was skipped.

在程序中不同执行上下文中使用同名的多个函数可能会导致歧义。为了避免函数调用的歧义性,始终需要使用作用域解析操作明确指定函数的作用域。

另请参阅

重载虚函数多态性

最后更新于