2010-03-16 9 views
5

Ich habe mich über den letzten Konstruktor für std::string erwähnt here. Dort heißt es:Sind Zeiger primitive Typen in C++?

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

Wenn InputIterator ein integraler Typ ist, verhält sich als sechste Konstruktor Version (die ein Recht darüber) durch eine Schublade gesteckt beginnen und enden zu nennen:

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

In jedem anderen Fall Die Parameter werden als Iteratoren verwendet, und der Inhalt wird mit den Werten der Elemente initialisiert, die von dem Element, auf das von Iterator begin verwiesen wird, zu dem Element unmittelbar vor demjenigen, auf das durch das Iteratorende verwiesen wird, gehen.

Also was bedeutet das, wenn InputIterator ein char * ist?

EDIT: Ok, meine schlechte. Ich habe gerade festgestellt, dass es in der Dokumentation einen integralen Typ und keinen primitiven Typ gibt, also gilt die Frage nicht für dieses Beispiel. Aber sind Zeiger Primitive?

Antwort

9

C++ hat kein Konzept von "primitiven" Typen; Ganzzahlen sind grundlegende Typen und Zeiger sind zusammengesetzte Typen.

In diesem Fall char* kann auch nicht in size_t oder char umgewandelt werden, so wird es als InputIterator Template-Parameter genommen werden.

+0

Außerdem sind sowohl ganze Zahlen als auch Zeiger "skalare Typen". – fredoverflow

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

C++ Zeiger ganz gut das Konzept der InputIterator implementieren (immerhin STL Iteratoren sind eine Verallgemeinerung von C++ Zeiger). Daher werden die beiden Argumente als Zeiger auf ein Array von Zeichen betrachtet, das die ersten und die Elemente "ein übergeordnetes Ende" bezeichnet, die zum Initialisieren der Zeichenfolge benötigt werden.

+0

InputIterator kann ein std :: list-Iterator sein, der keinen Zeiger auf ein Array von irgendetwas darstellt. – CMircea

+0

@iconiK: Ich habe InputInterator nicht geschrieben alle Zeiger in einem Array, ich schrieb, dass Zeiger innerhalb eines Arrays alle Anforderungen von InputIterator (in der Tat bidirektionale Iteratoren) erfüllten und dass es kein Zufall war, dass bidirektionale Iteratoren entwickelt wurden eine Abstraktion des Verhaltens von Zeigern innerhalb eines Arrays sein. – AProgrammer