Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 未指定的函数参数_C++_C++03 - Fatal编程技术网

C++ 未指定的函数参数

C++ 未指定的函数参数,c++,c++03,C++,C++03,他在书中使用了符号: template <typename> static no& test(...); 模板 静态no&test(…); 最初我认为这只是“插入废话”的简写,用户必须替换他们自己的类型: template<typename> static no& test(int); 模板 静态no和测试(int); 然而,在编译器中测试它之后,没有任何更改,它工作了!此外,当在原始问题的上下文中使用…而不是显式int时,重载解析的行为与预期的一

他在书中使用了符号:

template <typename>
static no& test(...);
模板
静态no&test(…);
最初我认为这只是“插入废话”的简写,用户必须替换他们自己的类型:

template<typename>
static no& test(int);
模板
静态no和测试(int);
然而,在编译器中测试它之后,没有任何更改,它工作了!此外,当在原始问题的上下文中使用
而不是显式int时,重载解析的行为与预期的一样


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

是的,省略号指定可变函数(可变长度参数列表)。您可以使用
va_start
va_arg
va_end
宏来“拉出”参数。不过,您需要一个初始参数;他们需要一个起始位置来开始从堆栈中获取参数(省略号+
sizeof(arg)
之前的
arg

/*对一组整数求和*/
整数和(整数参数,…){
va_列表ap;
va_启动(ap、arg_cnt);
整数和=0;
对于(int i=0;i
这个
是省略号(我相信是复数省略号)的最初解释吗?GManNickG正在使用SFINAE,省略号用于控制过载分辨率。@DyP:哦,糟了,错过了。Fixed您可能需要添加在SFINAE中使用它的原因:省略号转换序列(当函数参数与省略号匹配时发生)被列为最差的隐式转换序列。因此,重载解析将首选任何其他隐式转换,并且只有在其他重载不匹配(在本例中)或未被考虑(例如,由于替换失败)时,才会考虑此函数重载(带省略号)。
/* 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;
}