未指定的函数参数

unspecified function parameter

本文关键字:参数 函数 未指定      更新时间:2023-10-16

在GManNickG的回答中,他使用了符号:

template <typename>
static no& test(...);

最初我认为这只是"插入废话"的简写,用户必须替换自己的类型:

template<typename>
static no& test(int);

然而,在没有任何更改的情况下,在编译器中测试它之后,它就工作了!此外,当在原始问题的上下文中使用...与显式int时,重载解析的行为与预期的一样。

这在C++03中被称为什么/我应该如何解释这段代码?它看起来接近C++11的可变模板,但两者之间有一些明显的区别。

是的,省略号指定一个变长函数(可变长度参数列表)。您可以使用va_startva_argva_end宏来"拉出"参数。然而,你需要一个初步的论证;他们需要一个开始从堆栈中获取参数的起始位置(省略号之前的arg+sizeof(arg))。

/* sum a bunch of ints */
int sum(int arg_cnt, ...) {
    va_list ap;
    va_start(ap, arg_cnt);
    int sum = 0;
    for(int i = 0; i < arg_cnt; ++i) {
        sum += va_arg(ap, int);
    }
    va_end(ap);
    return sum;
}