在函数C ++中使用默认值

时间:2020-07-20 13:58:08

标签: c++

假设此代码:

#include<stdio.h>    

int t(int a, int b=6, int c=7){
 return b;
}

int main(){    
  
  return 0;  
} 

如何调用t并仅传递a and c的值并将b用作默认值?

2 个答案:

答案 0 :(得分:3)

没有办法做到。参数只能按顺序传递,因此无法对默认传递的参数使用默认参数。

但是,您可以使用聚合类作为参数,将其与默认成员初始化程序和指定的初始化程序(C ++ 20)结合使用,可以很好地模拟命名参数传递:

Transform

使用指定的初始化程序不是强制性的,因此不需要C ++ 20。更加简洁易读。

根据程序的结构,struct Args { int a; int b = 6 int c = 7; }; int t(const Args& args); int main() { t({ .a = 42, // b will be 6 .c = 1337, }); } 可以成为该类的成员函数。

答案 1 :(得分:2)

如果您只想重载b,这将起作用。如果您打算同时重载c,则应该使用其他答案中提到的更复杂的方法。 ;)

在C ++中没有直接的方法可以做到这一点。尽管您可以链接函数调用(这在实现将成员作为默认参数的类的方法中非常常用)。

这样的事情应该可以作为解决方法

#include<iostream>    

int t(int a, int b, int c) {
  return b;
}

int t(int a, int c) {
  return t(a, 6, c);
}

int main() {    
  auto x = t(1, 2); // this will call t with a = 1, b = 6, c = 2
  std::cout << x;   // prints 6
  return 0;  
} 
相关问题