我对C ++很新鲜,并尝试使用函数进行不同的操作。我刚遇到一个问题,或者说是一个反思。
想象一下;我们有一个功能:
void test(int one, int two) {
if(one == 5) {
cout << "one is 5" << endl;
}
if(two == 10) {
cout << "two is 10" << endl;
}
if(one == 1 && two == 2) {
cout << "they both are 1 and 2" << endl;
}
}
然后在这里我们有我们的主要功能,我们称之为测试:
测试(1,8)这很好,但如果我在某些情况下只想打电话给test(1)
怎么办?如果我不想给函数赋两个整数怎么办?因为我希望它只为int one
做一些东西?我想通过简单地执行test(1,NULL)
或test(NULL,10)
来解决这个问题,但这很丑陋吗?
必须有办法,我知道我的榜样很糟糕,但我希望你明白我的观点。
答案 0 :(得分:3)
一种方法是为第二个提供默认参数:
void test(int one, int two = 0)
然后,如果仅使用一个参数调用它,则第二个参数将采用默认值。
另一种方法是重载函数:
void test(int one)
这样做的好处是,您可以为传递单个参数的情况编写特定行为。
答案 1 :(得分:0)
如果您需要部分评估,请参阅std::bind:
#include <iostream>
#include <functional>
using namespace std::placeholders;
int adder(int a, int b) {
return a + b;
}
int main() {
auto add_to_1 = std::bind(adder, 1, _1);
auto add_1_to = std::bind(adder, _1, 1);
std::cout << add_1_to(2) << std::endl;
std::cout << add_to_1(2) << std::endl;
return 0;
}
答案 2 :(得分:0)
有两个选项:
void test(int one, int two = -1) {
/* ... */
}
这给函数一个默认值,因此调用test(2)意味着测试函数将以1 = 2和2 = -1运行。只有在函数定义中没有默认参数的变量时,这些默认值才有效。
void testA(int one, int two = -1); // OK
void testB(int one, int two = -1, int three); // ERROR
void testC(int one, int two = -1, int three = -1); // OK
然后另一个选择是重载此功能。重载意味着一个函数有两个不同的定义。重载函数时要遵循一些规则,主要是不同的重载必须通过您提供的参数来区分。因此,在您的情况下,解决方案将是:
void test(int one) {
/* ... */
}
void test(int one, int two) {
/* ... */
}
如果您有任何其他问题,请随时提出。
答案 3 :(得分:-1)
你不能。您必须为函数的每个参数提供参数。如果有默认参数,您可能不需要明确地这样做,但仍然为该参数提供参数。