为什么我在C ++中调用函数时无法初始化参数?

时间:2015-05-09 07:27:55

标签: c++

以下是我的计划。在main函数中,我在调用a函数时初始化了badd2var。调用函数时,C ++是否允许在括号中初始化?

#include "stdafx.h"
#include <iostream>

using std::cout;
using std::cin;
using std::endl;
int add2var(const int a, const int b);


int main()
{
    int c = add2var(int a = 5, int b = 6.1);
    cout << c << endl;
    return 0;
}

int add2var(const int a, const int b)
{
    return a + b;
}

它产生如下错误。

语法错误:'int'前面应加')'

函数不带0个参数

语法错误:')'

2 个答案:

答案 0 :(得分:2)

有两种方法。第一个是以下

int a;
int b;
int c = add2var( a = 5, b = 6);

第二个是函数具有默认参数的以下内容

int add2var(const int a = 5, const int b = 6 );


int main()
{
    int c = add2var();
    //,,,

答案 1 :(得分:2)

我们只能在函数定义和声明期间为函数参数指定数据类型。当我们进行函数调用时,我们只是传递那些函数参数/参数的实际值。因此,函数调用语法int c = add2var(int a = 5, int b = 6.1);是完全错误的。我没有在函数调用中看到任何语言的参数类型。

您的代码中还有许多其他问题。

  1. 拨打int c = add2var(5, 6);而不是int c = add2var(int a = 5, int b = 6.1);,我们无法在此处指定数据类型。
  2. 6.1传递浮点int并不好。在函数调用期间它将被舍入。
  3. 如果您想通知您的API用户您的函数参数未被修改,请使用以下代码中的const作为函数参数。但是,当您将参数作为值传递时,它不会保护任何内容。没有人可以改变“5”和“6”的含义吗?

    int add2var(const int a, const int b)
    {
        return a + b;
    }
    
  4. 如果您打算使用默认参数,请参阅下面的代码。

    int add2var(int a = 5, int b = 6)
    {
       a + b;
    }
    
    int main()
    {
      add2var();         // result = 11, a will use default parameter 5 and b will use 6
      add2var(1);        // result = 7, b will use default parameter of 6
      add2var(2, 3); // result = 5, override default value for a and b
    }