Pages

vendredi 30 novembre 2012

Déduction de type

Avec la nouvelle norme du C++ certains mots réservés se sont vu modifiés et de nouveaux mots-clefs sont apparus. C'est le cas de auto et decltype.

auto permet maintenant de ne pas indiquer de type lors de l'initialisation, le compilateur le faisant tout seul.

auto i = 8; // int
auto& x = i; // int&
auto p = new A; // A*
auto f = [](int n) { return n + 1; }; // quelque chose :)

decltype quant à lui permet de copier le type d'une variable ou d'une expression. Il s'utilise là où auto ne peut l'être, lors de la déclaration d'une variable.

decltype(f(8)) r; // int
decltype(x) ref; // int&

À noter que 2 parenthèses transforment le type en référence.

decltype((i)) a; // int&

Encore plus fort, auto et decltype peuvent être combinés pour déduire le retour d'une fonction.

template<typename _T, typename _U>
auto f(const _T& a, const _U&) -> decltype(a + b)
{ return a + b; }

Aucun commentaire: