C ve C ++ 'da denilen (…) nedir?


30

Bunun kullanımlarından biri ..., C ve C ++ 'daki varyasyon varlıklarını belirtmektir .

Onun adı ne?

Bu şekilde kullanıldığında operatör veya başka bir şey olarak sınıflandırılıyor mu?

İlgili başka ayrıntılar var ...mı?

Düzenleme: Amacını biliyorum .... Hem C hem de C ++ 'da benzer olduğunu umuyorum, adını ve sınıflandırmasını soruyorum.



1
C değişkenli fonksiyonlar ve C ++ değişkenli şablon argümanları tamamen farklıdır, bulduğunuz bağlamı verebilir misiniz? (PS, C / C ++ mevcut değil, lütfen birini seçin)
JVApen

1
Sadece adını ve sınıflandırmasını bilmek istiyorum
Ardent Coder

Yanıtlar:


43

Bu biridir noktalama işaretçisi .

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

İşlev bildiriminde buna üç nokta denir .


Üç nokta aynı zamanda bazı derleyici Cdil uzantıları tarafından da kullanılır . Örnek - gcc anahtar / kasa aralığı genişletmesi

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
Ancak, sorumdaki parametre paketlerinden bahsettiğim yorumlardan biri olarak, cevabınızda neden bahsetmediniz?
Ateşli Coder

3
C11 Standardına bağlantı: port70.net/~nsz/c/c11/n1570.html#6.4.6
pmg

5
@ArdentCoder: Parametre paketleri için bile hala C ++ 'da üç nokta denir.
Nicol Bolas

4
Bunu eklersiniz ...olduğunu değil bir parçasını oluşturmaz, çünkü bir operatör ifadesi (tanımladığı 'ifade' anlamında C11 §6.5 ). O ile ortak noktası daha vardır { }ve ;diğer noktalama işaretçisi olmaktansa.
Zwol

1
@zwol C ++ 'da simge ...bir ifadenin parçası olabilir. Ancak resmi sözdizimi tarafından bir operatör olarak kabul edilmez .
aschepler


8

... 'nin kullanımlarından biri, C ve C ++' daki varyasyon varlıklarını belirtmektir. '

Evet, layman'ın terimleriyle ..., bir kullanım senaryosunun birden fazla veya birden fazla (sahte kod noktalama işaretlerinde olduğu gibi, bazen farklı türlere benzemek için birden fazla nokta kullanırız) olarak düşünülebilir, bunun için varyasyonları (anlam olarak çoklu olmak) C ++ 'da' değişen 'bağımsız değişkenler / parametreler), işlevler veya şablonlar için değişken sayıda bağımsız değişkeni ifade eder.

Onun adı ne?

eksilti

Bu şekilde kullanıldığında operatör veya başka bir şey olarak sınıflandırılıyor mu?

Hayır, kesinlikle bir operatör değildir, çünkü herhangi bir sayıda argümanı iletmenize izin verir , bunlar üzerinde işlem yapmaz .

... ile ilgili başka ayrıntılar var mı?

Bildiğim kadarıyla -

  1. Özel bir belirleyici;
  2. Üç nokta daima argüman listesinde son sıradadır;
  3. Kullanımı söz konusu olduğunda, yalnızca bir şablon / işlev için parametre sayısı sınırlarını kaldırmak istediğinizde veya genişletme için genişletilebilir sayıda parametreye ihtiyacınız olduğunda kullanılır. (yani değişken sınıf sınıf şablonunda veya fonksiyon şablonunda parametre paketi genişletmesi sağlar) Uygulamada çoğunlukla bilinen bir dizi sabit parametreye ihtiyacımız vardır, bu nedenle çoğu durumda geçerli değildir;
  4. sizeofPaket genişletme olarak da sınıflandırıldığı için operatörle birlikte kullanılabilir .

Düzenleme: Ben ...onun adı ve sınıflandırma hakkında soruyorum amacını biliyorum, hem de C ve C ++ benzer.

Ad aynıdır, ancak kullanım C ++ ve C için değişebilir.

Sadece eski dilde kullanımı hakkında bilgim var. (I bir HackerRank sorun olan hatırlamak Variadics yararlılığını kapsayan,.)


3

Üç tam durak dizisine hem C hem de C ++ 'da üç nokta... denir


C ++ 'da, üç nokta farklı paket türlerini başlatmaya ve genişletmeye yardımcı olur .

  • A parameter pack- tür ve tanımlayıcı arasında bir üç nokta olduğunda
    Type ... identifier

  • A pack expansion- bir desen ve bir üç noktadan oluşur
    pattern...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.