Un programme C peut-il prendre l'adresse d'une fonction définie dans la bibliothèque standard, et si oui, dans quelles conditions ?
Non, pas dans général.
Selon [namespace.std], former un pointeur vers une fonction de bibliothèque standard est un comportement non spécifié, sauf si la fonction est désignée comme adressable. Cela s'applique également aux fonctions membres.
std::invoke(std::boolalpha, std::cout);
Dans cet exemple, std::boolalpha est une fonction adressable désignée par [fmtflags.manip] . Par conséquent, cette ligne est bien formée et équivalente à :
std::cout.setf(std::ios_base::boolalpha);
std::invoke(static_cast<ctype_func>(std::tolower), 'A');
Cependant, pour les fonctions définies dans
La sortie inattendue n'est pas garantie , et le code peut même ne pas être compilé. Cela s'applique également aux fonctions membres déclarées dans la bibliothèque standard C.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!