6 votes

Qu'est-ce qu'une std::function "valide" ?

Ici :

http://en.cppreference.com/w/cpp/utility/functional/function

operator bool est décrite : "Vérifie si l'objet appelable stocké est valide".

Vraisemblablement un défaut construit std::function n'est pas valide, mais est-ce le seul cas ?

Par ailleurs, comment vérifie-t-il la validité de la demande ?

Est le cas où operator() soulève std::bad_function_call exactement le cas où l'objet n'est pas valide ?

7voto

GManNickG Points 155079

Il est mal écrit tel quel, votre confusion est justifiée. Par "valable", on entend "qui a une cible".

A std::function "a une cible" lorsqu'une fonction lui a été attribuée :

std::function<void()> x; // no target
std::function<void()> y = some_void_function; // has target

x = some_other_void_function; // has target
y = nullptr; // no target

x = y; // no target

Ils auraient dû soit définir le terme "valide" avant de l'utiliser, soit s'en tenir à la formulation officielle.

1voto

Bo Persson Points 42821

La norme linguistique stipule que

explicit operator bool() const noexcept;

Retourne : true si *this a une cible, sinon false.

Cela signifie que le function n'a rien à appeler. La construction par défaut de function ne le fait manifestement pas.

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