C 和 C++ 中的 (...) 是什么?

What is the (...) called in C and C++?

... 的用途之一是在 C 和 C++ 中表示 可变参数 实体。

它叫什么名字?

以这种方式使用时,它是否被归类为运算符或其他东西?

关于 ... 的任何其他详细信息?

编辑: 我知道 ... 的目的。我问的是它的名称和分类,我希望在 C 和 C++ 中都相似。

它是标点之一

6.4.6  Punctuators
Syntax punctuator:
     one of  [    ]    (    )    {   }    .    ->
             ++   --   &    *    +   -    ~    !
             /    %    <<   >>   <   >    <=   >=    ==   !=   ^   |   &&   ||
             ?    :    ;    ...
             =    *=   /=   %=   +=  -=   <<=  >>=   &=   ^=   |=
             ,    #    ##
             <:   :>   <%   %>   %:   %:%:

在函数声明中它被称为省略号


某些编译器 C 语言扩展也使用省略号。 示例 - gcc switch/case 范围扩展

const char *test(unsigned num)
{
    switch(num)
    {
        case 0 ... 9:
            return "the value is in the 0 to 9 range";
        case 10 ... 99:
            return "the value is in the 10 to 99 range";
        default:
            return "out of tested range";
    }
}

https://godbolt.org/z/YBLma-

... 在英语和 C 标准中都被称为 省略号

One of the uses of ... is to denote variadic entities in C and C++.`

是的,通俗地说,... 可以被认为表示一个用例的多个(例如在伪代码标点符号中,我们有时使用多个点来表示不同类型),为此如果我们在 C++ 中考虑可变参数(在 'varying' arguments/parameters 的意义上是多个),它会指代函数或模板的可变数量的参数。

What is its name?

省略号

Is it classified as an operator or something else when used in that way?

不,它绝对不是运算符,因为它允许您传递任意数量的参数,而不是操作它们。

Any other details regarding ...?

据我所知-

  1. 它是一个特殊的说明符;
  2. 省略号总是出现在参数列表的最后;
  3. 就其用法而言,仅当您想取消对template/function的参数数量限制或需要具有可扩展数量的参数以进行扩展时才使用它。 (即它在可变class模板或函数模板中提供参数包扩展)在实践中,我们大多需要一组固定的已知参数,因此它不适用于大多数情况;
  4. 它可以与 sizeof 运算符一起使用,因为它 class 也被定义为包扩展。

Edit: I know the purpose of ... I am asking about its name and classification, which I hope, is similar in both C and C++.

名称相同,但 C++ 和 C 的用法可能有所不同。

我只熟悉它在前一种语言中的用法。 (我记得在 Variadics 上有一个 HackerRank 问题,涵盖了它的实用性。)

三个句点 ... 的序列在 C 和 C++ 中都称为 省略号


在 C++ 中,省略号有助于初始化和扩展不同种类的 packs.

  • A parameter pack - 当类型之间有一个省略号 标识符
    Type ... identifier

  • 一个pack expansion - 由一个模式和一个省略号
    组成 pattern...