OVH Cloud OVH Cloud

Constructeur par défaut des itérateurs

3 réponses
Avatar
Christophe de VIENNE
Bonjour à tous,

Y a-t-il un moyen, garanti par la norme, de savoir si un itérateur a été
instancié avec son constructeur par défaut et non encore assigné ?

Le code suivant fonctionne avec g++ 3.2 :

#include <vector>

int main()
{
std::vector<int>::iterator i;
assert(&*i == 0);
assert( i == std::vector<int>::iterator() );
}


- Quelle forme de test est-elle valable (voir garantie) ? si aucune des
deux comment faire ?

- Le test ne fonctionne pas avec std::map : comment faire ?


Merci :-)

Christophe

3 réponses

Avatar
Fabien LE LEZ
On Fri, 24 Oct 2003 16:26:13 +0200, Christophe de VIENNE
wrote:

Y a-t-il un moyen, garanti par la norme, de savoir si un itérateur a été
instancié avec son constructeur par défaut et non encore assigné ?


Etant donné qu'un vector<>::iterator peut très bien être un pointeur,
j'aurais tendance à dire non.

Par contre, j'aimerais bien savoir dans quel(s) cas tu peux avoir
besoin d'un tel test.

--
;-)

Avatar
Christophe de VIENNE
Fabien LE LEZ wrote:

Par contre, j'aimerais bien savoir dans quel(s) cas tu peux avoir
besoin d'un tel test.



Ben en fait en y regardant de plus près c'était la solution la plus
sale, et je n'avais même pas envisagé de l'utiliser...
Mais le fait d'y avoir pensé m'a montré que je n'avais pas une réponse
rigoureuse à cette question. D'où mon message :-)


A+

Christophe

Avatar
kanze
Fabien LE LEZ wrote in message
news:...
On Fri, 24 Oct 2003 16:26:13 +0200, Christophe de VIENNE
wrote:

Y a-t-il un moyen, garanti par la norme, de savoir si un itérateur a
été instancié avec son constructeur par défaut et non encore assigné
?


Etant donné qu'un vector<>::iterator peut très bien être un pointeur,
j'aurais tendance à dire non.


En général, je crois que les itérateurs, pointeur ou non, obéissent aux
régles des pointeurs ici -- il y a bien un constructeur par défaut, mais
il ne fait rien, et tout essai de lire l'itérateur a un comportement
indéfini. Lire l'itérateur même, et non seulement lire à travers
l'itérateur.

Par contre, j'aimerais bien savoir dans quel(s) cas tu peux avoir
besoin d'un tel test.


Quand on n'a pas fait une conception détaillée avant de coder :-) ?

Ou plus probablement, pour l'instrumentation.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16