Come si chiama il (...) in C e C ++?


30

Uno degli usi di ...è denotare entità variadiche in C e C ++.

Come si chiama?

È classificato come operatore o qualcos'altro se usato in quel modo?

Qualche altro dettaglio in merito ...?

Modifica: conosco lo scopo di .... Sto chiedendo il suo nome e la classificazione, che spero, sia simile in C e C ++.



1
Le funzioni C variadiche e gli argomenti del modello variadico C ++ sono completamente diversi, puoi dare un contesto in cui l'hai trovata? (PS, C / C ++ non esiste,
scegline

1
Voglio solo conoscerne il nome e la classificazione
Ardent Coder,

Risposte:


43

È uno dei segni di punteggiatura .

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

Nella dichiarazione di funzione si chiama ellissi .


L'ellissi è anche usata da alcune Cestensioni del linguaggio del compilatore . Esempio: estensione gcc dell'interruttore / custodia

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
Tuttavia, come uno dei commenti nella mia domanda menzionato sui pacchetti di parametri, perché non l'hai menzionato nella tua risposta?
Ardent Coder

3
Link allo standard C11: port70.net/~nsz/c/c11/n1570.html#6.4.6
pmg

5
@ArdentCoder: viene ancora chiamato ellissi in C ++, anche per i pacchetti di parametri.
Nicol Bolas,

4
Vorrei aggiungere che non... è un operatore, perché non può far parte di un'espressione (nel senso di "espressione" definita da C11 §6.5 ). Ha più in comune con e che con gli altri segni di punteggiatura. { };
zwol,

1
@zwol In C ++ il token ...può far parte di un'espressione. Ma non è considerato un operatore dalla sintassi formale.
aschepler

8

La ...è indicato come un ellissi in inglese e nello standard C.


8

Uno degli usi di ... è denotare entità variadiche in C e C ++. `

Sì, in parole povere si ...può pensare che denoti più di uno o multipli (come nella punteggiatura di pseudo-codice a volte usiamo più punti per assomigliare a diversi tipi) di un caso d'uso, per il quale se consideriamo i variabili (essendo multipli nel senso di argomenti / parametri "variabili") in C ++, farebbe riferimento a un numero variabile di argomenti per funzioni o modelli.

Come si chiama?

ellissi

È classificato come operatore o qualcos'altro se usato in quel modo?

No, sicuramente non è un operatore in quanto ti consente di passare qualsiasi numero di argomenti, non di operare su di essi.

Altri dettagli riguardanti ...?

Per quanto ne so -

  1. È uno specificatore speciale;
  2. I puntini di sospensione sono sempre gli ultimi nell'elenco degli argomenti;
  3. Per quanto riguarda il suo utilizzo, viene utilizzato solo quando si desidera rimuovere i limiti sul numero di parametri per un modello / funzione o quando è necessario disporre di un numero estensibile di parametri per l'espansione. (ovvero fornisce l'espansione del pacchetto di parametri in un modello di classe variadica o modello di funzione) In pratica abbiamo principalmente bisogno di un set fisso di parametri noti, quindi non è applicabile alla maggior parte dei casi;
  4. Può essere utilizzato con l' sizeofoperatore, poiché è classificato anche come espansione del pacchetto.

Modifica: conosco lo scopo di ...chiedermi il suo nome e la sua classificazione, che spero sia simile sia in C che in C ++.

Il nome è lo stesso, ma l'utilizzo può variare per C ++ e C.

Conosco solo il suo uso nella lingua precedente. (Ricordo di aver avuto un problema HackerRank su Variadics , che ne copre l'utilità.)


3

La sequenza di tre arresti completi ...è chiamata ellissi in C e C ++


In C ++, i puntini di sospensione aiutano a inizializzare ed espandere diversi tipi di pacchetti .

  • A parameter pack- quando sono presenti dei puntini di sospensione tra il tipo e l' identificatore
    Type ... identifier

  • A pack expansion- è costituito da un motivo e un'ellissi
    pattern...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.