2010-03-16 18 views
5

Mi chiedevo l'ultimo costruttore per std::string menzionato here. Dice:I puntatori sono tipi primitivi in ​​C++?

template<class InputIterator> string (InputIterator begin, InputIterator end); 

Se InputIterator è un tipo integrale, si comporta come la versione del costruttore sesta (quello proprio sopra questo) di fusione di caratteri iniziare e terminare chiamarlo:

string(static_cast<size_t>(begin),static_cast<char>(end)); 

In ogni altro caso , i parametri sono presi come iteratori e il contenuto viene inizializzato con i valori degli elementi che vanno dall'elemento riferito dall'iteratore all'elemento immediatamente precedente a quello riferito dall'iter iteratore.

Quindi cosa significa se InputIterator è un char *?

MODIFICA: Ok, mio ​​male. Ho appena realizzato che si dice tipo integrale, non di tipo primitivo nella documentazione, quindi la domanda non si applica a quell'esempio. Ma ancora, sono puntatori primitivi?

risposta

9

C++ non ha un concetto di tipi "primitivi"; gli interi sono tipi fondamentali e i puntatori sono tipi composti.

In questo caso, char* non può essere convertito in entrambi i size_t o char, in modo che sarà preso come parametro InputIterator modello.

+0

Inoltre, sia gli interi che i puntatori sono "tipi scalari". – fredoverflow

0
char * str = "Some string"; 
std::string s(str, str+6); // s = "Some s"; 
0

I puntatori C++ implementano molto bene il concetto di InputIterator (dopo tutto, gli iteratori STL sono una generalizzazione dei puntatori C++). Quindi i due argomenti sono considerati come puntatori a una matrice di caratteri che designa il primo e gli elementi "una fine passata" necessari per inizializzare la stringa.

+0

InputIterator può essere un iteratore std :: list, che non costituisce un puntatore a un array di qualsiasi cosa. – CMircea

+0

@iconiK: Non ho scritto InputInterator erano tutti i puntatori all'interno di un array, ho scritto che i puntatori all'interno di un array soddisfacevano tutti i requisiti di InputIterator (in effetti Bidirectional Iterators) e che non era un caso che gli Iterator bidirezionali fossero progettati per essere un'astrazione del comportamento dei puntatori all'interno di un array. – AProgrammer

Problemi correlati