the draft C++11 standard: N3337 içinde top-level cv-qualifiers
için birkaç başvuru bulundu, ancak tanım yok.C++ 11 Standardında 'en üst düzey cv-niteleyiciler' tanımı nerede?
cevap
Bu soru bana yeni bir şeyler öğrenme şansı verdi, ben de burada paylaşıyorum, Aşağıdaki pasajı yazmadım! C++, bir tip ilk seviye için geçerli olan bir ev-eleme olarak
bir üst düzey olarak ev-niteleyici olarak adlandırılır. Örneğin,:
T *const p;
üst düzey ev-eleme const
ve içinde:
T const *volatile q;
üst düzey ev-eleme volatile
olup. Diğer taraftan, herhangi bir üst düzey cv-niteleyicisi bulunmamaktadır. Bu durumda, cv-niteleyicileri const
ve volatile
ikinci seviyede görünür.
Bir işlevin imzası, bir parametre türünün en üst düzeyinde görünen niteleyiciler haricinde, bu işlevin parametre türlerinde görünen tüm cv kalifikasyonlarını içerir. Örneğin
:
int f(char const *p);
const
eleme parametre bildiriminde üst düzeyinde değil, bu nedenle işlevin imza parçasıdır. Diğer taraftan
int f(char *const p);
const
eleme, üst düzeydedir.
int f(char *p);
Kaynak: Ben de ama ne Yukarıdaki haberi açıkça N3337 belirtilmiştir standardında bir tanım bulamadı Top-Level cv-Qualifiers in Function Parameters
§8.3.5-5 Bu fonksiyon ile aynı imzası vardır fonksiyon tipi oluşturulurken
parametre türleri listesini üretmek sonra bir parametre türü modifiye herhangi bir üst düzey ev-kalifiye silinir.
Düzenleme: Yukarıdaki postayı standardında bir tanım yazma zamanda buldum ama şimdi var olamazdı biri as pointed out by Shafik:
n4296 alıntı: Bunda
Uluslararası Standart, notasyon cv (veya cv1, cv2, vb.)), Türlerin açıklamasında kullanılan cv-niteleyicileri, yani {const}, {volatile}, {const, volatile} veya boş setinden oluşan rastgele bir grubu temsil eder. Bir cv T türü için, bu türünün en üst düzey cv-niteleyicileri, cv. [Örnek: türünde tanımlanmış int int &'a karşılık gelen tür, üst düzey bir cv eleme sahip değildir. Tipik uçucu int * const'a karşılık gelen tipi üst düzey cv-niteleyici yapısına sahiptir. C sınıfı bir sınıf için, type-id void (C :: * volatile) (int) const'a karşılık gelen tür, üst düzey cv-niteleyicisi volatiline sahiptir. - son örnek]
Yine de soruyu yanıtlamıyor. – juanchopanza
@juanchopanza Düzenlendi: Açıkça açıklamak için standartta bir tanım yok ama üst düzey sıyırma işlevini bildiren bir geçit ekledim. –
Standard'ın 'en üst düzey cv-niteleyiciler' için bir tanımı yok gibi görünüyor. Yukarıda verilen mükemmel makale için cevabınızı kabul ediyorum. Teşekkürler. – Mao
Yalnızca standarttaki ifadenin bir örneğini ve norm dışı bir notta bulunan buldum. herhangi bir başka tanımdan yoksun olmak, ifadenin, normal olarak İngilizce olacak şekilde ifadenin yorumlandığını varsaymalıdır; niteleyicinin, tip beyanının en yüksek seviyesinde olması. Tabii ki genellikle no'lu bildirimleri (C++ 'da değil) soldan sağa, no'lu adreslerde yazıyoruz, ancak normal kurallar geçerli: soldan önce geliyor ve yukarı aşağı geliyor. Yani char *const p
gibi bir şey için, onu (ingilizce) yazacağız: "p bir char işaretçisidir". (Bu durumda, İngilizce, C++ 'da kullanacağımız sıranın tam tersi olan 'dur. Ancak, bu her zaman böyle değildir, .) const
işaretçiyi değiştirdiğinden, bu en çok (üstte) öğesidir. üst düzey bir niteleyicidir.
yazımında bu tanımı ekledi. Örneğindeki en soldaki eleman, "char", işaretçiden ayrı olarak da kalifiye olabilir ... Yoksa İngilizce versiyonundan mı bahsediyorsun? Açıklamanız kafa karıştırıcı. – rubenvb
@rubenvb ingilizce sürümü hakkında konuşuyorum. C++ sürümünde en çok bulunanı bulmak ayrıştırma gerektirir. Hangisi en soldaki ingilizce versiyonda ortaya çıkıyor. –
C++ 'da en üstte en sağdaki, en değil mi? – rubenvb
Bu soru diyor defect report 609: What is a “top-level” cv-qualifier? konusudur:
ifade “üst düzey cv-eleme” Standart defalarca kullanılır, ancak tanımlı değil. İfade, T & yapısı gibi bir yapıda bulunan yapının “üst düzey” olduğunu belirtmek için yanlış anlaşılmış olabilir, çünkü göründüğü en yüksek seviyedeyse, T & const bozuktur.
ve teklif edilen çözünürlük aşağıdaki şekilde ve not ekleyerek göstermektedir: bir tür cv T için
, bu tür üst-düzey ev-kalifiye olan cv ile gösterilir. [Örnek: type-id “const int &” 'a karşılık gelen tür, üst düzey bir cv-eleme sahip değildir. Type-id “volatile int * const” öğesine karşılık gelen tür, üst düzey cv-niteleyici const'a sahiptir. C sınıfı bir sınıf için, type-id “void (C :: * volatile) (int) const” 'a karşılık gelen tip, üst düzey cv-niteleyici uçucusuna sahiptir. -end örnek]
kusur şimdi son taslak standardının bir parçasıdır ve biz N4527 yeni ifadeler bulmak anlamına gelir DRWP için statü değişti
Güncelleme.
Cv-niteleyiciler, üst düzey bir standart İngilizce kelime, tanımına gerek yok bir tanımı var. – Deduplicator
@Deduplicator benim cevabımda not aldığımda bu bir hata raporu yok ve bu 'NAD' olarak reddedilmiyordu, bu yüzden açık olduğunu düşünmüyorum –