2013-03-14 12 views
25

Come da soggetto. Ho visto questa terminologia in una domanda che ho chiesto di recente e apparentemente è un termine ben definito, ma non riesco a trovare nulla su StackOverflow.Cosa significa "cv-non qualificato" in C++?

+7

@Andrew: solo forum scadenti. Aggiungiamo lo stackoverflow. –

+0

@LihO: da quello che so su StackOverflow, il copypaste non è il metodo preferito per rispondere a una domanda. Normalmente comporta una serie estremamente dettagliata di risposte con riferimenti molto specifici alle specifiche –

+2

@StefanoBorini: [secondo risultato] (http://en.cppreference.com/w/cpp/language/cv) da googling cv-qualifiers è chiaro ed esaustivo. Non è affatto un forum schifoso. – Antoine

risposta

28

Esistono tipi fondamentali e tipi di composti. I tipi fondamentali sono i tipi aritmetici, void e std::nullptr_t. I tipi composti sono matrici, funzioni, puntatori, riferimenti, classi, unioni, enumerazioni e puntatori a membri non statici.

A cv-non qualificato tipo è uno di questi tipi.

Per qualsiasi tipo cv-qualificato, vi sono tre corrispondendo cv qualificato tipi:

  • const qualificati - con il const cv-qualificazione
  • volatili qualificato - con lo volatile qualificatore di cv
  • qualifica const-volatile - con entrambi i const e volatile qualifiche Cv

Nota, tuttavia, che i qualificatori di cv applicati a un tipo di matrice si applicano effettivamente ai suoi elementi.

I tipi cv-qualificati e cv-non qualificati sono distinti. Quello è int è un tipo distinto da const int.

+2

wow, non riesco a capire .. perché è denominato 'cv-non qualificato'? sarebbe stato meglio se prima ci avessi detto "cosa significa" prima di "ciò che è". ovviamente ora so cv è per const e volatile .. –

24

Un tipo è "cv-non qualificato" se non ha qualificatori di cv. Un cv-qualifer è o const o volatile.

2

Generalmente significa "lo stesso tipo, ma con qualsiasi qualificatore cv rimosso", quindi (ad esempio) la versione cv-non qualificata di void volatile * const x sarebbe void *x.

Si noti che, tuttavia, sto rimuovendo i qualificatori di cv sia dal puntatore stesso sia da a cosa punta. Nella maggior parte dei casi, cv-unqualified si riferirà solo a un oggetto alla volta, quindi una versione cv -qualificata del puntatore stesso sarebbe ancora void volatile *x, mentre una versione non cagliata di ciò a cui punta è void *const x.

6

cv corrisponde a const e volatile (e più raramente a mutable), due attributi che qualificano un tipo. Puoi manipolarli con std::remove_const e simili in C++ 11.

L'eccellente sito cppreference gives you more informazioni.

Per rispondere alla tua domanda, un tipo cv-non qualificato non ha o è stato rimosso dai suoi qualificatori di cv. Ad esempio, int è la parte cv-non qualificata di const volatile int.

std::remove_cv<T>::type è la parte cv -qualificata di T.

+0

l'ho fatto, ma non è qui. Lo voglio qui –

+0

Ma lo è! [Questa domanda] (http: // StackOverflow.it/questions/3610943/correlation-between-specifier-and-qualifier), ad esempio, è sullo stesso argomento ma il poster mostra che ha svolto alcune ricerche per comprendere alcune nozioni di base ma è confuso da alcuni punti specifici. Quale sono io credo lo spirito di questo sito. – Antoine

+1

Non lo è. Il titolo della domanda non trasmette il suo contenuto. Voglio che chiunque abbia la stessa domanda che ho avuto su google e chiedere "cosa significa cv non qualificato" e arrivare a questa domanda, dove è chiaramente spiegato. Da un lato, penso che questo comportamento piranha della community di stackoverflow rispetto a domande ragionevoli ma "percepite facili" sia davvero antipatico, e se esistesse un'alternativa, sarei già passato. Calm the dannatamente down persone –

9

cv-qualificato tipo è un tipo che non è stato specificato da una CV-qualificazioni. Questi definiscono due proprietà di base di un tipo: constness e volatilità. Vedere C++ 03 3.9.3 CV-qualificazioni §1:

Un tipo di cui al 3.9.1 e 3.9.2 è un tipo cv-qualificato. Ogni tipo che è un tipo di oggetto completo o incompleto cv-qualificato o è nullo (3.9) ha tre versioni cv qualificati corrispondenti del suo tipo:

  • un const qualificato versione,
  • un volatili qualificata versione e
  • a versione const-volatile.

Il termine tipo di oggetto (1.8) include i qualificatori di cv specificati al momento della creazione dell'oggetto.

La presenza di un identificatore const in un decl-specificatore-seq dichiara un oggetto di const qualificati tipo oggetto; tale oggetto è chiamato const object.

La presenza di un identificatore volatile in un decl-specificatore-seq dichiara un oggetto di volatilequalified tipo oggetto; tale oggetto è chiamato volatile object.

La presenza di entrambi CV-qualificazioni in declspecifier-seq dichiara un oggetto di const volatile qualificato tipo oggetto; tale oggetto è chiamato const volatile object.