gpt4 book ai didi

c++ - 如何防止以错误的顺序传递函数参数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:36 30 4
gpt4 key购买 nike

假设我有一个如下所示的 C++ 函数:

double myfunction(double a, double b) {
// do something
}

然后我这样调用它:

double a = 1.0;
double b = 2.0;
double good_r = myfunction(a, b);
double bad_r = myfunction(b, a); // compiles fine

我想确保 ab 永远不会以错误的顺序提供。在 C++ 中确保这一点的最佳方法是什么?

其他语言允许命名参数,像这样:

double good_r = myfunction(a=a, b=b);
double bad_r = myfunction(a=b, b=a); // mistake immediately obvious
double bad_r = myfunction(b=b, a=a); // compiles fine

或者也许问题可以使用类型来部分解决,即

double my_type_safe_function(a_type a, b_type b) {
// do something
}
a_type a = 1.0;
b_type b = 2.0;
double good_r = myfunction(a, b);
double bad_r = myfunction(b, a); // compilation error

编辑:一些人问我所说的“错误顺序”是什么意思。我的意思是,在实际代码中 ab 具有一定的意义。例如,参数可能改为 heightwidth。它们之间的区别对于函数返回正确的结果非常重要。但是,它们都是 float ,并且都具有相同的尺寸(即长度)。此外,它们没有“明显”的顺序。编写函数声明的人可以假定 (width, height) 而使用该函数的人可以假定 (height, width)。我想要一种方法来确保这不会错误地发生。使用两个参数很容易注意顺序,但在大型项目中,如果参数多达 6 个,就会出现错误。

理想情况下,我希望在编译时完成检查,并且不会影响性能(即在一天结束时,它们被视为普通的旧 float 或其他)。

最佳答案

这个怎么样:

struct typeAB {float a; float b; };

double myfunction(typeAB p) {
// do something
return p.a - p.b;
}

int main()
{
typeAB param;
param.a = 1.0;
param.b = 2.0;
float result = myfunction(param);
return 0;
}

当然,您在分配参数时仍然可能会搞砸,但这种风险很难避免:)

关于c++ - 如何防止以错误的顺序传递函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23244844/

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