2010-03-16 13 views
5

Me preguntaba sobre el último constructor para std::string mencionado here. Dice:¿Los punteros son tipos primitivos en C++?

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

Si InputIterator es un tipo entero, se comporta como la versión constructor sexto (el más adecuado por encima de este) por encasillamiento comenzar y terminar a llamarlo:

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

En cualquier otro caso , los parámetros se toman como iteradores, y el contenido se inicializa con los valores de los elementos que van desde el elemento al que hace referencia el iterador hasta el elemento justo antes del referido por el extremo del iterador.

¿Qué significa eso si InputIterator es char *?

EDITAR: Bien, mi mal. Me acabo de dar cuenta de que dice tipo integral, no tipo primitivo en la documentación, por lo que la pregunta no se aplica a ese ejemplo. Pero aún así, ¿los punteros son primitivos?

Respuesta

9

C++ no tiene un concepto de tipos "primitivos"; los enteros son tipos fundamentales y los punteros son tipos compuestos.

En este caso, char* no se puede convertir en cualquiera size_t o char, por lo que será tomado como el parámetro InputIterator plantilla.

+0

Además, tanto los enteros como los punteros son "tipos escalares". – fredoverflow

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

los punteros de C++ implementan bastante bien el concepto de InputIterator (después de todo, los iteradores STL son una generalización de los punteros de C++). Por lo tanto, los dos argumentos se consideran punteros a una matriz de char que designa el primero y los elementos de "un extremo pasado" necesarios para inicializar la cadena.

+0

InputIterator puede ser un iterador std :: list, que no constituye un puntero a una matriz de nada. – CMircea

+0

@iconiK: No escribí InputInterator, todos eran punteros dentro de una matriz, escribí que los punteros dentro de una matriz cumplían todos los requisitos de InputIterator (de hecho, iteradores bidireccionales) y que no era casualidad, que los iteradores bidireccionales estaban diseñados para ser una abstracción del comportamiento de los punteros dentro de una matriz. – AProgrammer

Cuestiones relacionadas