📜  C++中的省略号与示例(1)

📅  最后修改于: 2023-12-03 14:39:58.740000             🧑  作者: Mango

C++中的省略号与示例

在C++中,省略号(...)可以用作用于函数参数的特殊标记,表示可变参数列表。在定义函数时,使用省略号作为参数表示该函数接受可变数量的参数。

可变参数列表

以下是使用省略号实现可变参数列表的基本语法格式:

#include <cstdarg>

int func(int arg1, ...)
{
    va_list args;
    va_start(args, arg1);
    
    // 访问可变参数
    int value = va_arg(args, int);
    
    va_end(args);
    return value;
}

以上代码使用了标准库头文件 <cstdarg>中的几个函数:

  • va_list:类型用来存储所有可变参数的信息。
  • va_start:宏函数指针参数,用于初始化可变参数列表。
  • va_arg:宏函数用于从参数列表中访问可变参数。
  • va_end:宏函数用于释放可变参数列表资源。

在该示例中,函数 func 接收两个参数,并使用 va_list 定义了一个可变参数的列表,接着使用 va_start 初始化这个列表。在函数中,通过 va_arg 访问了其中的元素,并用 va_end 结束该列表。在实际开发中,可以根据需求自由使用这些函数。

示例
打印可变参数数量

下面的示例中,定义的函数 printCount 可以打印出传入参数的个数。红色的字体用于新学习的地方。

#include <iostream>
#include <cstdarg>

int printCount(int count, ...)
{
    std::va_list list;
    va_start(list, count);
    
    std::cout << "The number of arguments is: " << count << '\n';
    
    for (int arg = 0; arg < count; ++arg)
    {
        std::cout << "  arg " << arg + 1 << ": " << va_arg(list, int) << '\n';
    }
    
    va_end(list);
}

int main()
{
    printCount(3, 1, 2, 3);
    return 0;
}

在该示例中,我们生成一组可变参数:123。函数 printCount 经过改进,现在可以将其数量打印到控制台上,而我们只需使用一个 int 类型的参数 count 来传递这一信息。在下一步中,我们使用 for 循环遍历所有可变参数,并打印到控制台上。

求和变量长度的整型数组

该示例说明了可变参数的另一种使用方法。我们定义了一个名字为 sum 的函数,该函数可以对其传入的变量长度的整型数组进行求和操作。

#include <iostream>
#include <cstdarg>

// 按可变参数求和
int sum(const int count, ...)
{
    va_list args;
    va_start(args, count);
    
    int total = 0;
    for (int i = 0; i < count; ++i)
    {
        total += va_arg(args, int);
    }
    
    va_end(args);
    return total;
}

int main()
{
    std::cout << sum(3, 1, 2, 3) << '\n'; // 输出 "6"
    std::cout << sum(5, 1, 2, 3, 4, 5) << '\n'; // 输出 "15"
    return 0;
}

从上图我们可以看到,函数 sum 的参数列表使用 ... 代表接收若干个整型参数。接下来,我们开始对参数进行求和操作。在 main() 函数中,我们调用了这个 sum 函数,分别传递不同的参数集并将结果输出到控制台上。当我们运行程序后,我们将看到:sum(3, 1, 2, 3) 应为 6sum(5, 1, 2, 3, 4, 5) 应为 15