如何在C++中传递可选参数给方法?

ctrmrzij  于 2023-01-18  发布在  其他
关注(0)|答案(9)|浏览(153)

如何在C++中将可选参数传递给方法?任何代码片段...

bcs8qyzn

bcs8qyzn1#

下面是将mode作为可选参数传递的示例

void myfunc(int blah, int mode = 0)
{
    if (mode == 0)
        do_something();
     else
        do_something_else();
}

可以用两种方式调用myfunc,并且都有效

myfunc(10);     // Mode will be set to default 0
myfunc(10, 1);  // Mode will be set to 1
irlmq6kh

irlmq6kh2#

关于默认参数用法的一个重要规则是:
默认参数应在最右端指定,一旦指定了默认值参数,就不能再指定非默认参数。例如:

int DoSomething(int x, int y = 10, int z) -----------> Not Allowed

int DoSomething(int x, int z, int y = 10) -----------> Allowed
bakd9h0s

bakd9h0s3#

如果有多个默认参数,你们中的一些人可能会感兴趣:

void printValues(int x=10, int y=20, int z=30)
{
    std::cout << "Values: " << x << " " << y << " " << z << '\n';
}

给定以下函数调用:

printValues(1, 2, 3);
printValues(1, 2);
printValues(1);
printValues();

将生成以下输出:

Values: 1 2 3
Values: 1 2 30
Values: 1 20 30
Values: 10 20 30

参考:http://www.learncpp.com/cpp-tutorial/77-default-parameters/

vaqhlq81

vaqhlq814#

为了遵循这里给出的示例,但为了澄清使用头文件时的语法,函数forward声明包含可选参数默认值。
myfile.h

void myfunc(int blah, int mode = 0);

myfile.cpp

void myfunc(int blah, int mode) /* mode = 0 */
{
    if (mode == 0)
        do_something();
     else
        do_something_else();
}
ftf50wuq

ftf50wuq5#

随着C++17中std::optional的引入,你可以传递可选参数:

#include <iostream>
#include <string>
#include <optional>

void myfunc(const std::string& id, const std::optional<std::string>& param = std::nullopt)
{
    std::cout << "id=" << id << ", param=";

    if (param)
        std::cout << *param << std::endl;
    else
        std::cout << "<parameter not set>" << std::endl;
}

int main() 
{
    myfunc("first");
    myfunc("second" , "something");
}

输出:

id=first param=<parameter not set>
id=second param=something

参见https://en.cppreference.com/w/cpp/utility/optional

vtwuwzda

vtwuwzda6#

使用默认参数

template <typename T>
void func(T a, T b = T()) {

   std::cout << a << b;

}

int main()
{
    func(1,4); // a = 1, b = 4
    func(1);   // a = 1, b = 0

    std::string x = "Hello";
    std::string y = "World";

    func(x,y);  // a = "Hello", b ="World"
    func(x);    // a = "Hello", b = "" 

}

注意:以下是格式错误的

template <typename T>
void func(T a = T(), T b )

template <typename T>
void func(T a, T b = a )
hpxqektj

hpxqektj7#

用逗号分隔它们,就像没有默认值的参数一样。

int func( int x = 0, int y = 0 );

func(); // doesn't pass optional parameters, defaults are used, x = 0 and y = 0

func(1, 2); // provides optional parameters, x = 1 and y = 2
gudnpqoy

gudnpqoy8#

通常通过设置参数的默认值:

int func(int a, int b = -1) { 
    std::cout << "a = " << a;
    if (b != -1)        
        std::cout << ", b = " << b;
    std::cout << "\n";
}

int main() { 
    func(1, 2);  // prints "a=1, b=2\n"
    func(3);     // prints "a=3\n"
    return 0;
}
yxyvkwin

yxyvkwin9#

Jus添加到@Pramendra的可接受的ans中,如果您有函数的声明和定义,则只需在声明中指定默认参数

相关问题