gpt4 book ai didi

c++ - 避免为非默认参数创建临时变量?

转载 作者:太空狗 更新时间:2023-10-29 19:41:27 27 4
gpt4 key购买 nike

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

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

void Func(int & param_1, bool & param_2, float & param_3, double & param_4) {
//some logic
}

所以我调用 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);

问题:有什么方法可以避免创建临时变量 i_val、b_val、f_val 等等?并在调用本身的行中创建它们?

我只对创建 i_valb_val 并获取它们的值感兴趣。 f_vald_val 对我来说是不必要的,但在其他与我无关的调用中是必需的。有没有办法避免创建临时变量只是为了将每个参数传递到调用中?

我知道我们可以将最后 2 个参数设置为默认参数,但是使用默认参数会使调用者忽略函数参数。有没有办法不将最后 2 个参数设置为默认值?在调用方法的那一刻即时创建 float 和 double 变量

我知道我会收到关于为什么您不想使用默认参数但只是检查是否有可能的交叉问题:)

最佳答案

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

void Func(int & param_1, bool & param_2, float & param_3, double & param_4);

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

std::tuple<int, bool, float, double> Func();

或:

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

X Func();

这样,你就可以写:

auto res = Func();

然后只需使用您想要的字段。


在 C++17 中,对于结构化绑定(bind),可以是:

auto [ival, bval, _1, _2] = Func();

没有真正明确的方式来表达您不关心第 3 位和第 4 位成员的想法,但这并不坏。

关于c++ - 避免为非默认参数创建临时变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42957323/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com