在c++;,如何传递所有当前函数';是另一个函数的参数吗? < C++中是否有一个表达式允许我将当前函数的所有参数依次传递给另一个函数?请参见下面的示例 int bar(int a, char* b, double c) { } int foo(int a, char* b, double c) { bar({what goes here?}); // Equivalent to bar(a, b, c); }

在c++;,如何传递所有当前函数';是另一个函数的参数吗? < C++中是否有一个表达式允许我将当前函数的所有参数依次传递给另一个函数?请参见下面的示例 int bar(int a, char* b, double c) { } int foo(int a, char* b, double c) { bar({what goes here?}); // Equivalent to bar(a, b, c); },c++,C++,不久前我读了一本关于干净代码的书,书中提倡最多2个函数参数。3只不过是情有可原,4只是罪大恶极 如果你要经常一起传递a,b和c,很明显,它们在一起意味着什么。因此,在这种情况下,本书建议创建一个结构来保存该信息: struct Abc { int a; char *b; double c; }; int bar(Abc abc) { } int foo(Abc abc) { bar(abc); } 这样,您就不会因为使用更长、更具描述性的名称而惩罚自己,您

不久前我读了一本关于干净代码的书,书中提倡最多2个函数参数。3只不过是情有可原,4只是罪大恶极

如果你要经常一起传递
a
b
c
,很明显,它们在一起意味着什么。因此,在这种情况下,本书建议创建一个结构来保存该信息:

struct Abc {
    int a;
    char *b;
    double c;
};

int bar(Abc abc)
{

}

int foo(Abc abc)
{
    bar(abc);
}

这样,您就不会因为使用更长、更具描述性的名称而惩罚自己,您还可以为这三个值的共同含义添加另一个信息性名称。

bar(a,b,c)
bar(a,b,c)
将传递这三个参数。在某些情况下,您可能希望将参数定义为右值引用,并在调用函数时使用
std::forward
(但对于在此处传递的类型,这可能不会有任何区别)。传递参数列表有一些面向模板的方法,但对于像您这样的简单情况,最好的解决方案是减少懒惰。您可以将所有3个变量组合在一个结构中,并将一个参数传递给函数,即结构指针或引用。这样,您只需要处理一个参数,而不是3个。但是,根据您的程序,这可能没有意义,特别是如果您希望通过值而不是指针/引用来传递变量。如果多个参数不代表一个抽象,那么使用多个参数没有什么错。在这里,我们不能说任何关于论点的意义,所以这只是猜测。这也不能回答问题。@Sopel注意,我没有说我同意这种做法。然而,在这种情况下,如果您多次传递相同的参数(经常需要问一个关于它的问题),我认为可以安全地假设有某种方法将这些参数抽象到结构中。如果没有其他东西,它们可以抽象为
struct foo\u bar\u args
“但是,在这种情况下,如果您多次传递相同的参数(经常需要问一个关于它的问题),我认为可以安全地假设有某种方法将它们抽象为一个结构。”