【发布时间】:2024-04-16 22:55:02
【问题描述】:
我有这个函数声明:
void do_somthing(int a,int b,foo bar = foo());
我想为一些参数调用它,如下所示:
foo bar = get_bar_by_some_algorithm();
int a = 5,b = 6;
if(bar.empty()){
do_somthing(a,b);
}
else{
do_somthing(a,b,bar);
}
我想摆脱if 声明。所以,我是这样做的:
foo bar = get_bar_by_some_algorithm();
int a = 5,b = 6;
do_somthing(a,b,bar.empty()?foo():bar);
但是,如果do_somthing 从默认参数的角度来看是稳定的,但如果它更改为类似这样的内容,我的方法是可以接受的(它甚至好吗?):
void do_somthing(int a,int b,foo bar = get_special_foo());
我的代码将会过时,因为foo() 也不等于get_special_foo()。
问题是我如何使用? 运算符或任何简短的等效项来在非空的情况下传递参数,而在空的情况下不传递任何东西?
说明示例(虚构语法):
do_somthing(a,b,bar.empty()? the_default_argument : bar);
【问题讨论】:
-
三元运算符和
if都会做一个分支,顺便说一句。 -
您只需传入
bar并执行if(bar.empty())签入do_somthing。
标签: c++ c++11 ternary-operator default-arguments