如何在c ++中将前面的函数参数设置为其默认值?

Posted

技术标签:

【中文标题】如何在c ++中将前面的函数参数设置为其默认值?【英文标题】:How to set a preceding function parameter to its default in c++? 【发布时间】:2013-04-14 15:01:53 【问题描述】:

如果这个基本问题已经得到解答,我们深表歉意。我会在print() 的括号内放什么,以便将第一个参数保留为默认值,但为以下参数赋予新值 1 和 2?我知道我可以从字面上把 0 放在那里,但有没有办法让它默认?

#include<iostream>

using namespace std;

void printer(int a=0, int b=0, int c=0)
 cout << a << endl;
 cout << b << endl;
 cout << c << endl;


int main()

//leave a=0 and replace both b and c 
printer(/*?*/,1,2);

 return 0;

【问题讨论】:

重载printer()有什么问题吗? void printer(int b=0, int c=0) 并在函数内部声明int a 添加以上评论作为答案。 【参考方案1】:

你不能这样做,这是不允许的。只有最右边的参数可以省略。

【讨论】:

【参考方案2】:

默认参数列表是右关联的。所以不可能省略第一个参数列表。

【讨论】:

【参考方案3】:

第一个默认值之后的所有参数都是默认值。在这种特殊情况下,您可以通过更改顺序获得所需的内容:

void printer(int b=0, int c=0,int a=0)
 cout << a << endl;
 cout << b << endl;
 cout << c << endl;


//leave a=0 and replace both b and c 
printer(1,2);

输出:

0

1

2

【讨论】:

【参考方案4】:

使用std::placeholders::N 将要指定的参数委托给从std::bind 返回的函数对象。

int main()

   auto f = std::bind(printer, 0, std::placeholders::_1, std::placeholders::_2);

   f(4, 5);

Live Demo

【讨论】:

除非经常使用f,否则这可能有点矫枉过正!【参考方案5】:

您不能完全做到这一点,但解决此问题的一种方法是使用您的参数传递一个结构:

struct PrinterParams 
  int a,b,c;
  PrinterParams() : a(0), b(0), c(0)  
;

void printer(int a, int b, int c) 
 cout << a << endl;
 cout << b << endl;
 cout << c << endl;


void printer(const PrinterParams &params) 
  printer(params.a,params.b,params.c);



int main()
  PrinterParams params;

  params.b = 1;
  params.c = 2;
  printer(params);

 return 0;

【讨论】:

【参考方案6】:

你可以利用函数重载来实现你想要的:

void printer(int a, int b, int c) 
  cout << a << endl;
  cout << b << endl;
  cout << c << endl;


void printer() 
  printer(0, 0, 0);


void printer(int b = 0, int c = 0) 
  printer(0, b, c);


int main()
  // leave a = 0 and replace both b and c 
  printer(1, 2);

  return 0;

【讨论】:

这不起作用。任何对printer 的参数少于三个的调用都是模棱两可的,因为两个版本都与参数列表匹配。 更新了答案,请看。

以上是关于如何在c ++中将前面的函数参数设置为其默认值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在C中将函数指针数组的函数指针作为函数参数传递?

如何在 phpmyadmin 中将“关系显示列”设置为默认值

如何在radiogroup中将选中的单选按钮设置为默认值?

在 C 中,如何从用户定义的函数中获取一个值,然后在另一个用户定义的函数中将其打印出来? [关闭]

如何使用 XML 在 SQL 中将列默认值设置为今天的日期

如何在Xamarin的媒体插件中将闪存设置为默认值?