53 votes

Que fait le "void()" dans "auto f(params) -> decltype(..., void())" ?

J'ai trouvé le code aquí qui ressemblait à quelque chose comme ça :

auto f(T& t, size_t n) -> decltype(t.reserve(n), void()) { .. }

Dans toute la documentation que j'ai lue, on m'a dit que decltype est signé comme :

decltype( entity )

ou

decltype( expression )

Et il n'y a aucun second argument nulle part. Du moins c'est ce qui est indiqué sur Référence cpp . Est-ce un second argument pour decltype ? Et si oui, à quoi sert-il ?

71voto

Pubby Points 29386

Comme il s'agit d'une expression, la virgule est simplement l'opérateur virgule (ce qui signifie que le type est le type du côté droit) : void ), pas un autre argument.

Ce code utilise SFINAE - il est activé si t.reserve(n) existe mais il veut garder le type de retour comme void .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X