2 votes

Questions sur `std::cout << &std::hex << 123 << std::endl;``

Voici le extrait de code :

#include <iostream>

int main()
{
    std::cout << std::hex << 123 << std::endl;

    std::cout << &std::hex << 123 << std::endl;
}
  1. Qu'est-ce que &std::hex ? Je pense qu'il faut acquérir l'adresse de std::hex . Et l'adresse serait imprimée.

  2. Y a-t-il un problème potentiel avec cet extrait de code car quelqu'un a dit que c'est mauvais d'acquérir l'adresse d'une fonction fournie par la bibliothèque standard ?

0voto

Pete Becker Points 27371

Le nom d'une fonction se transforme en un pointeur vers cette fonction. Ainsi, std::cout << std::hex utilise l'inserteur de flux qui prend un pointeur vers une fonction qui prend un std::ios_base& et renvoie un std::ios_base& . L'inserteur de flux appelle simplement la fonction.

Les pointeurs de fonction ont une autre propriété particulière : lorsque vous écrivez &std::hex il est évalué à l'adresse de la fonction. Idem pour &&std::hex , &&&&std::hex etc. Ils signifient tous la même chose.

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