Dans l'article A Brief Look at C++0x, Bjarne Stroustrup (le créateur du C++) s'exprime sur l'avenir de ce langage. Rappelons que C++0x est le "nom de code" de la prochaine norme du langage qui est à l'étude depuis un certain temps déjà (voir Qu'est-ce que C++0x ?).

Dans son article, Bjarne explique que cette norme est entrée dans "une phase décisive" en vue de sa ratification en 2008. Il explique aussi que l'esprit de cette future norme est davantage de modifier la façon qu'ont les programmeurs de concevoir leur code plutôt que leur manière de l'écrire.
Une des priorités est de limiter l'introduction de nouveautés du langage au profit d'un enrichissement de la bibliothèque standard, dans un esprit de généricité, de simplicité et bien sûr de performance.

Bjarne effectue ensuite un rapide tour d'horizon des nouveautés. Il sera ainsi possible d'initialiser statiquement un conteneur avec une liste d'initialisation (au moyen de ce qui sera vraisemblablement un constructeur de séquence):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
class A {};
 
std::vector<A*> v = { 
    new A,
    new A,
    new A
};
de définir un alias sur des templates (template typedef):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
template<class T> using Vec = vector<T,My_alloc<T>>;
Vec<double> v = { 2.3, 1.2, 6.7, 4.5  };
l'utilisation des conteneurs de la STL sera simplifiée afin de ne plus exiger un itérateur de début et un autre de fin:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
sort( v ); // remplace sort( v.begin(), v.end() );
ceci sera rendu possible grâce à une des grande nouveautés de C++0x : l'introduction des concepts, qui permettent de décrire le type d'un type (ses propriétés). Cela se traduit notamment par l'apparition du mot-clé where dans les templates qui permet de spécifier clairement des conditions sur le paramètre T passé.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
template<Container C, Predicate Cmp>
    where Can_call_with<Cmp,typename C::value_type> // mot-clé where
    void sort(C& c, Cmp less);
Une autre grande nouveauté fort appréciable est la nouvelle signification du mot-clé auto (qui n'a actuellement plus d'utilité) : il permettra dans une déclaration de déduire automatiquement le type d'une variable à partir de son initialiseur.
Ainsi, l'utilisation des itérateurs de la STL sera fortement allégée. Au lieu d'écrire:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
for (std::vector<double>::const_iterator p = v.begin(); p!=v.end(); ++p)
    cout << *p << endl;
on pourra simplement écrire:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
for (auto p = v.begin(); p!=v.end(); ++p)
    cout << *p << endl;
La bibliothèque standard va elle aussi être fortement enrichie, avec l'apparition
  • des tables de hachage
  • des expressions régulières
  • de pointeurs intelligents plus complets
  • de fonctions mathématiques spéciales
et de bien d'autres choses.

En revanche le C++ ne comportera toujours pas de bibliothèque graphique standard, mais pourrait disposer d'un garbage collector et d'une gestion des threads. Les développeurs sur systèmes embarqués ne sont pas non plus oubliés, avec l'apparition d'une bibliothèque facilitant l'utilisation directe du matériel.