避免为没有默认的参数创建临时变量?

Gam*_*ads 3 c++ c++14 c++17

这听起来可能是一个疯狂的问题.

在我的C++代码中,我创建了一个这样的方法

void Func(int & param_1, bool & param_2, float & param_3, double & param_4) {
   //some logic
}
Run Code Online (Sandbox Code Playgroud)

所以我在main下面调用方法:

int i_val;
bool b_val;
float f_val;
double d_val;

//invoke Func here
Func(i_val, b_val, f_val, d_val);
Run Code Online (Sandbox Code Playgroud)

问题:有没有办法避免创建临时变量 i_val, b_val, f_val等等?并在调用本身的行中创建它们?

我感兴趣的只是在创造i_valb_val,并得到他们的价值观. f_val并且d_val对我来说是不必要的,但在其他一些与我无关的电话中是必要的.有没有办法避免创建临时变量只是为了将每个参数传递给调用?

我知道我们可以将最后2个参数作为默认参数,但是使用默认参数会使函数参数对调用者无视.有没有办法没有使最后2个参数默认?在调用方法时动态创建float和double变量

我明白,我会得到关于为什么你不想使用默认参数而只是检查是否有可能的交叉问题:)

Bar*_*rry 6

当你有四个输出参数时,就像你在这里做的那样:

void Func(int & param_1, bool & param_2, float & param_3, double & param_4);
Run Code Online (Sandbox Code Playgroud)

这表明你真的想要返回一个有4个成员的对象,比如:

std::tuple<int, bool, float, double> Func();
Run Code Online (Sandbox Code Playgroud)

要么:

struct X {
    int some;
    bool meaningful;
    float names;
    double here;
};

X Func();
Run Code Online (Sandbox Code Playgroud)

那样,你可以写:

auto res = Func();
Run Code Online (Sandbox Code Playgroud)

然后只使用你想要的字段.


在C++ 17中,结构化绑定可以是:

auto [ival, bval, _1, _2] = Func();
Run Code Online (Sandbox Code Playgroud)

没有一种明确的方式来表达你不关心第3和第4名成员的观念,但这并不坏.