c++变长函数中默认值参数的位置

where to place default value parameter in variable-length function in c++?

本文关键字:参数 位置 默认值 函数 c++      更新时间:2023-10-16

在变长参数函数中,必须排在最后。默认值启用的参数也必须是最后一个。

那么,在同一个函数中需要这两个呢?

现在我有一个日志实用程序:void MyPrint(int32_t logLevel, const char *format,…),用于根据'logLevel'打印日志。

然而,有时我希望它可以用作:MyPrint("日志测试编号%d",编号),不需要"logLevel"。

问题:默认参数和可变函数没有帮助。

在您的特定情况下,您可能只想创建两个版本的MyPrint,如:

MyPrint(const char *format, ...)
{
    _logLevel = 1;
    // stuff
}
MyPrint(int32_t logLevel, const char *format, ...)
{
    _logLevel = logLevel;
    //stuff
}

另一方面,命名参数习惯用法确实提供了另一种解决方案:

class Abc
{
public:
MyPrint(const char *format, ...)
{
    _logLevel = 1;
    // stuff
}
Abc &setLogLevel(int32_t logLevel)
{
    _logLevel = logLevel;
}
// stuff

};所以你可以像这样调用MyPrint():

MyPrint("blah,blah", 123);

或者像这样:

MyPrint("blah,blah", 123).setLogLevel(5);