Як називається (...) в C і C ++?


30

Одним із напрямків використання ...є позначення різноманітних сутностей у C та C ++.

Як його звати?

Чи класифікується це як оператор чи щось інше, коли використовується таким чином?

Будь-які інші деталі стосовно ...?

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



1
C різноманітні функції та аргументи варіативного шаблону C ++ абсолютно різні, чи можете ви дати контекст, у якому ви його знайшли? (PS, C / C ++ не існує, виберіть його)
JVApen

1
Я просто хочу дізнатися його назву та класифікацію
Ardent Coder

Відповіді:


43

Це один із пунктуаторів .

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

У оголошенні функції воно називається еліпсисом .


Ellipsis також використовується деякими Cрозширеннями мови компілятора . Приклад - розширення діапазону комутаторів / випадків

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: Це все ще називається еліпсісом у С ++, навіть для пакетів параметрів.
Нікол Болас

4
Я додам, що ...це не оператор, оскільки він не може складати частину виразу (у значенні "вираз", визначений C11 §6.5 ). Він має більше спільного з іншими пунктуаторами { }та ;ніж у них.
zwol

1
@zwol У C ++ маркер ...може бути частиною виразу. Але це не вважається оператором за формальним синтаксисом.
aschepler


8

Одним із застосувань ... є позначення різноманітних сутностей у C та C ++. "

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

Як його звати?

Еліпсис

Чи класифікується це як оператор чи щось інше, коли використовується таким чином?

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

Будь-які інші деталі щодо ...?

Наскільки мені відомо -

  1. Його спеціальний специфікатор;
  2. Еліпсис завжди стає останнім у списку аргументів;
  3. Що стосується його використання, він використовується лише тоді, коли потрібно зняти обмеження на кількість параметрів для шаблону / функції або коли потрібно розширювати кількість параметрів для розширення. (тобто він забезпечує розширення пакета параметрів у шаблоні або шаблоні функціональних варіантів класу) На практиці ми здебільшого потребуємо фіксованого набору відомих параметрів, тому він не застосовується у більшості випадків;
  4. Він може використовуватися з sizeofоператором, оскільки він також класифікується як розширення пакету.

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

Назва однакова, але використання може залежати від C ++ та C.

Мені лише знайоме його використання в колишній мові. (Я пам’ятаю, що у Variadics була проблема з HackerRank , що стосується її корисності.)


3

Послідовність трьох повних зупинок ...називається еліпсисом як в C, так і в C ++


У C ++ еліпсис допомагає ініціалізувати та розширювати різні види пакетів .

  • А parameter pack- коли між типом та ідентифікатором є еліпсис
    Type ... identifier

  • А pack expansion- складається з візерунка і еліпсиса
    pattern...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.