gpt4 book ai didi

c++ - ...(省略号)作为函数原型(prototype)中唯一的函数参数在 C++ 中意味着什么?

转载 作者:行者123 更新时间:2023-12-01 19:56:36 24 4
gpt4 key购买 nike

我遇到了一个函数声明,例如:

int vsa_d(...);

... 作为唯一的参数。

我知道通过省略号,我们可以引用多个对象,但是 ... 这里指的是什么呢?

  • 这是什么意思以及它的用途是什么?

  • 编译器计算什么...

  • 在调用函数时,省略号也可以用作函数参数吗?

<小时/>

我在这里找到了https://en.cppreference.com/w/cpp/language/variadic_arguments在“注释”下:

In the C programming language, at least one named parameter must appear before the ellipsis parameter, so printz(...); is not valid. In C++, this form is allowed even though the arguments passed to such function are not accessible, and is commonly used as the fallback overload in SFINAE, exploiting the lowest priority of the ellipsis conversion in overload resolution.

因此,它应用于“SFINAE”中的“后备过载”之类的任何内容。

这是什么意思?

最佳答案

...在某些 SFINAE 结构中,参数被用作包罗万象的东西。

这是 top answer 中的一个异常(exception)在关于编写类型特征的问题中 has_helloworld<T>检测类型 T 是否有成员 helloworld :

template <typename T>
class has_helloworld
{
typedef char one;
struct two { char x[2]; };

template <typename C> static one test( typeof(&C::helloworld) ) ;
template <typename C> static two test(...);

public:
enum { value = sizeof(test<T>(0)) == sizeof(char) };
};

int main(int argc, char *argv[])
{
std::cout << has_helloworld<Hello>::value << std::endl;
std::cout << has_helloworld<Generic>::value << std::endl;
return 0;
}

它的工作方式如下:if typeof(&T::helloworld)存在并且是格式良好的,则位于站点 test<T>(0) ,常数0被转换为指向成员(函数)的指针并选择该重载。返回类型的大小为一。

如果typeof(&T::helloworld) 不存在,则该过载不在潜在过载集中,并且回退 test(...)被选为过载。返回类型的大小为二。

test(...)重载有一个很好的特性,它总是最差匹配的、最后选择的重载。这意味着它可以充当此类结构中的“后备默认值”。

关于c++ - ...(省略号)作为函数原型(prototype)中唯一的函数参数在 C++ 中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60019443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com