Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c+中的默认参数+; 我是C++的新手,我有一个缺省参数的问题。 如果有具有以下原型的函数 void f(int=10,int=20,int=30,int=40)_C++ - Fatal编程技术网

c+中的默认参数+; 我是C++的新手,我有一个缺省参数的问题。 如果有具有以下原型的函数 void f(int=10,int=20,int=30,int=40)

c+中的默认参数+; 我是C++的新手,我有一个缺省参数的问题。 如果有具有以下原型的函数 void f(int=10,int=20,int=30,int=40),c++,C++,如果通过向函数传递两个参数来调用此函数,我们如何确保这些参数被视为第一个和第三个参数,而第二个和第四个参数被视为默认值。不可能。他们将被视为前两名 您只需使用不同的名称创建一个函数,使用两个参数并调用f 或者,如果您想模拟命名参数,可以使用类似的方法。例如: #include <iostream> using namespace std; int f_impl(int a,int b, int c, int d){ cout << a << " "

如果通过向函数传递两个参数来调用此函数,我们如何确保这些参数被视为第一个和第三个参数,而第二个和第四个参数被视为默认值。

不可能。他们将被视为前两名

您只需使用不同的名称创建一个函数,使用两个参数并调用
f

或者,如果您想模拟命名参数,可以使用类似的方法。例如:

#include <iostream>
using namespace std;

int f_impl(int a,int b, int c, int d){
    cout << a << " " << b << " " << c << " " << d << endl;
    return 42;
}

struct f{
    int _a, _b, _c, _d;
    f() : _a(10), _b(20), _c(30), _d(40){}
    f& a(int a){ _a = a; return *this;}
    f& b(int b){ _b = b; return *this;}
    f& c(int c){ _c = c; return *this;}
    f& d(int d){ _d = d; return *this;}
    int operator()(){ return f_impl(_a, _b, _c, _d); }
};

#define F(x) (f()x())

int main(){

    f().a(100).c(300)();

    cout << F(.b(1000).d(4000)) << endl;

    return 0;
}

这是不可能的。他们将被视为前两名

您只需使用不同的名称创建一个函数,使用两个参数并调用
f

或者,如果您想模拟命名参数,可以使用类似的方法。例如:

#include <iostream>
using namespace std;

int f_impl(int a,int b, int c, int d){
    cout << a << " " << b << " " << c << " " << d << endl;
    return 42;
}

struct f{
    int _a, _b, _c, _d;
    f() : _a(10), _b(20), _c(30), _d(40){}
    f& a(int a){ _a = a; return *this;}
    f& b(int b){ _b = b; return *this;}
    f& c(int c){ _c = c; return *this;}
    f& d(int d){ _d = d; return *this;}
    int operator()(){ return f_impl(_a, _b, _c, _d); }
};

#define F(x) (f()x())

int main(){

    f().a(100).c(300)();

    cout << F(.b(1000).d(4000)) << endl;

    return 0;
}

<>这不是C++中的默认参数如何工作。如果将两个参数传递给函数
f
,它们将始终作为前两个参数,而后两个参数将是
30
40


<> P> C++函数只支持位置参数。

< P>这不是C++中的默认参数如何工作。如果将两个参数传递给函数
f
,它们将始终作为前两个参数,而后两个参数将是
30
40


换句话说,C++函数只支持位置参数。如果需要,默认参数将从上次分配。p>


如有必要,将从最后一个参数开始分配默认参数


你不能。函数的参数按顺序匹配参数。您可以使用重载代替如下默认参数:

void myFunc(int a,int b,int c,int d);
void myFunc(int a,int c) {
    myFunc(a,20,c,40);
}

你不能。函数的参数按顺序匹配参数。您可以使用重载代替如下默认参数:

void myFunc(int a,int b,int c,int d);
void myFunc(int a,int c) {
    myFunc(a,20,c,40);
}

正如其他人所说,C++不能这样做。

但是,您可以使用四个初始化为您定义的值的整数成员创建struct/class。然后将其作为参数传递给函数

范例

struct Param
{
  int a;
  int b;
  int c;
  int d;

  Param() : a(10), b(20), c(30), d(40) {}
  void setA(int value) { a = value; }
  void setB(int value) { a = value; }
  void setC(int value) { a = value; }
  void setD(int value) { a = value; }
}

void f(Param& param) {}

Param param;
param.setA(67);
param.setC(9);
f(param);

正如其他人所说,C++不能这样做。

但是,您可以使用四个初始化为您定义的值的整数成员创建struct/class。然后将其作为参数传递给函数

范例

struct Param
{
  int a;
  int b;
  int c;
  int d;

  Param() : a(10), b(20), c(30), d(40) {}
  void setA(int value) { a = value; }
  void setB(int value) { a = value; }
  void setC(int value) { a = value; }
  void setD(int value) { a = value; }
}

void f(Param& param) {}

Param param;
param.setA(67);
param.setC(9);
f(param);

您请求的功能被调用


默认参数和命名参数组合可以让你有更多的选择来做你建议的事情,但不可否认的是,C++没有命名参数。然而,其他一些语言,如C#和VB,可能还有Python,都已经命名了参数,您所要求的特性被称为


默认参数和命名参数组合可以让你有更多的选择来做你建议的事情,但不可否认的是,C++没有命名参数。但是,其他一些语言如C++和VB,以及Python都已经命名为参数

实际上,你可以在C++中用命名帮助来命名参数(在Wiki文章中也提到了命名参数)。(在关于命名参数的wiki文章中也提到了)。

…或者您可以向标准委员会申请添加关键字参数。:…或者您可以向标准委员会申请添加关键字参数。:)阅读MSDN文章-阅读MSDN文章-如何确保
myFunc(1,2)
调用第二个函数,而不是第一个函数?另外,如果要调用第一个函数,传递前两个参数,该怎么办?如果在
void myFunc(int a,int b,int c,int d)的原型中未定义默认值,编译器将选择合适的函数。否则它将给您编译器错误。@Nawaz我没有在任何参数上设置默认参数。如果您想要第一个,请为第二个提供四个或两个参数。@IronMensan:没错。你改变了行为。如果我写
myFunc(1,2)
其中的参数是前两个参数,会怎么样?@Nawaz你不能两全其美,有两个参数的myFunc必须有意义,编译器无法读懂你的心思来找出什么。OP要求做一些不能做的事情,我建议做一些可能满足他需要的其他事情。您如何确保
myFunc(1,2)
调用第二个函数,而不是第一个?另外,如果要调用第一个函数,传递前两个参数,该怎么办?如果在
void myFunc(int a,int b,int c,int d)的原型中未定义默认值,编译器将选择合适的函数。否则它将给您编译器错误。@Nawaz我没有在任何参数上设置默认参数。如果您想要第一个,请为第二个提供四个或两个参数。@IronMensan:没错。你改变了行为。如果我写
myFunc(1,2)
其中的参数是前两个参数,会怎么样?@Nawaz你不能两全其美,有两个参数的myFunc必须有意义,编译器无法读懂你的心思来找出什么。OP要求做一些不能做的事情,我建议做一些可能满足他需要的其他事情。