假设此代码:
#include<stdio.h>
int t(int a, int b=6, int c=7){
return b;
}
int main(){
return 0;
}
如何调用t
并仅传递a and c
的值并将b
用作默认值?
答案 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;
}