1 Complément du cours

Cette section complète le cours de syntaxe de base du C++. Sa lecture n’est pas requise pour réaliser le TP, mais les éléments abordés seront utilisés lors des TP ultérieurs.

1.1 Le mot-clé auto

Ce mot-clé permet de faire de la déduction de type sous réserve que la déduction puisse être réalisée sans ambiguïté. La déduction de type ne fonctionne pas sur des méthodes virtuelles. La déduction de type est particulièrement intéressante sur des types longs, par exemple des types dépendants de l’espace de nom d’un autre type. En voici un exemple :

int a;
auto *p = &a; // déduit int *
auto v = 6; // déduit int

double f() {/*...*/ }
const auto r = f(); // déduit le retour de double

1.2 Les boucles sur ensembles

Les boucles sur ensembles sont un type de boucles for avec une syntaxe particulière, permettant d’éviter l’usage explicite d’itérateurs ou l’usage d’indices. Par exemple, le code suivant va parcourir une séquence d’entiers dans un vecteur avec une boucle sur ensemble :

std::vector<int> v{1, 2, 3, 4};
for (const auto &e: v) {
    std::cout << e << " ";
}

Cette syntaxe s’apparente au foreach de certains langages. En C++, elle s’appuie sur les itérateurs (forward iterator), ainsi que les méthodes begin() et end() qui définissent le début et la fin d’une séquence.

1.3 Les espaces de noms

Les espaces de noms C++ permettent de définir des ensembles de types, classes, etc. Par exemple, l’espace de nom std contient des éléments standards du langage, tels que :

Pour accéder à un membre d’un namespace, utilise l’opérateur "double deux points" ::. Voici un exemple avec les opérateurs de flux pour afficher à l’écran :

#include <iostream>
int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

Avec les espaces de noms vient un nouveau mot-clé : using. Il permet deux choses :