c++ - 带三点参数的函数

标签 c++ function

<分区>

最近我发现了带有三个点参数的函数原型(prototype)。我编写了自己的函数并且编译得很好:

void func(int a, ...){}

这是什么意思?

更新

谢谢大家!我想到了。这是我的例子:

void func(unsigned int n_args, int arg, ...)
{
    for(unsigned int i = 0; i < n_args; ++i)
        cout << *((int*)&arg + i) << ' ';
}

此函数打印出由空格字符分隔的参数。

最佳答案

具有三个点的函数表示您可以传递可变数量的参数。由于被调用函数并不真正知道传递了多少参数,因此您通常需要某种方式来告知这一点。因此需要一些额外的参数,您可以使用这些参数来确定参数。

printf 就是一个很好的例子。您可以传递任意数量的参数,第一个参数是一个字符串,它描述了传入的额外参数。

void func(int count, ...)
{
    va_list args;
    int i;
    int sum = 0;

    va_start(args, count);
    for(i = 0; i < count; i++)
        sum += va_arg(args, int);
    va_end(ap);

    printf("%d\n", sum);
}

更新

要处理您的评论,您不需要参数的名称。这就是它的全部意义所在,因为在编译时您不知道将传递哪些参数和多少参数。这当然取决于功能。在我上面的示例中,我假设只有 int 被传递。正如您从 printf 中了解到的,您可以传递任何类型,并且您必须解释它们。这就是为什么您需要一个格式说明符来告诉函数传递的参数类型的原因。或者如我的示例所示,您当然可以假设一个特定类型并使用它。

关于c++ - 带三点参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20901811/

相关文章:

c++ - 为枚举类创建类似成员函数的直观方法 (C++11)

c++ - 拦截 VBA 应用程序之间的消息

function - PL/SQL 将函数作为参数传递

c++ - 未定义的函数引用 (c++)

c++ - 路径中左节点/子节点的最大数量

c++ - 有没有办法决定模板类的模板参数类型?

c++ - 为任务管理器封装成员函数指针的好方法

c++ - 将 Matrix 作为指向函数的指针传递

c++ - 从不同的 C 文件导入函数

C++ 函数参数验证(指针与引用参数)