Как называется (…) в C и C ++?


30

Одним из применений ...является обозначение переменных элементов в C и C ++.

Как это называется?

Это классифицируется как оператор или что-то еще, когда используется таким образом?

Любые другие детали, касающиеся ...?

Изменить: я знаю цель .... Я спрашиваю о его названии и классификации, которые, я надеюсь, похожи как на C, так и на C ++.



1
Функции C variadic и аргументы шаблонов C ++ variadic совершенно разные, можете ли вы дать контекст, в котором вы его нашли? (PS, C / C ++ не существует, пожалуйста, выберите один)
JVApen

1
Я просто хочу узнать его имя и классификацию
Ardent Coder

Ответы:


43

Это один из пунктуаторов .

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

В объявлении функции это называется многоточием .


Многоточие также используется некоторыми Cрасширениями языка компилятора . Пример - переключатель gcc / расширение диапазона регистра

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-


1
Однако, как один из комментариев в моем вопросе упоминал о пакетах параметров, почему вы не упомянули об этом в своем ответе?
Ярый кодер

3
Ссылка на стандарт C11: port70.net/~nsz/c/c11/n1570.html#6.4.6
pmg

5
@ArdentCoder: он все еще называется многоточием в C ++, даже для пакетов параметров.
Николь Болас

4
Я бы добавил, что ...это не оператор, потому что он не может составлять часть выражения (в смысле «выражения», определенного в C11 §6.5 ). Она имеет больше общего с { }и ;чем с другими знаки пунктуации.
zwol

1
@zwol В C ++ токен ...может быть частью выражения. Но это не считается оператором по формальному синтаксису.
Ашеплер


8

Одним из применений ... является обозначение переменных элементов в C и C ++. `

Да, в терминах непрофессионала ...можно рассматривать как обозначение более чем одного или кратных (как в пунктуации псевдокода мы иногда используем несколько точек для напоминания разных типов) варианта использования, для которого, если мы рассмотрим вариадику (будучи множественной в смысле «изменяющихся» аргументов / параметров) в C ++, он будет ссылаться на переменное число аргументов для функций или шаблонов.

Как это называется?

эллипсис

Это классифицируется как оператор или что-то еще, когда используется таким образом?

Нет, это определенно не оператор, поскольку он позволяет передавать любое количество аргументов, а не оперировать ими.

Любые другие детали, касающиеся ...?

Насколько я знаю -

  1. Это специальный спецификатор;
  2. Многоточие всегда стоит последним в списке аргументов;
  3. Что касается его использования, его используют только тогда, когда вы хотите снять ограничения на количество параметров для шаблона / функции или когда вам требуется иметь расширяемое количество параметров для расширения. (т.е. он обеспечивает расширение пакета параметров в шаблоне класса variadic или шаблоне функции). На практике нам в основном требуется фиксированный набор известных параметров, поэтому он не применим в большинстве случаев;
  4. Он может использоваться с sizeofоператором, так как он также классифицируется как расширение пакета.

Редактировать: я знаю цель, ...которую я спрашиваю о его названии и классификации, которая, я надеюсь, похожа как на C, так и на C ++.

Название одно и то же, но использование может отличаться для C ++ и C.

Я только знаком с его использованием на прежнем языке. (Я помню, как имел проблему с HackerRank на Variadics , рассматривая ее полезность.)


3

Последовательность из трех полных остановок ...называется многоточием в C и C ++


В C ++ многоточие помогает инициализировать и расширять различные виды пакетов .

  • A parameter pack- когда между типом и идентификатором есть многоточие
    Type ... identifier

  • А pack expansion- состоит из рисунка и многоточия
    pattern...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.