Question

Cette question est née d'une discussion que j'avais sur la bonne façon de produire une valeur numérique en utilisant l'habitude ostream & operator << (ostream &, some_type) Pour un type numérique en C ++.

La façon dont je connais le comportement de STD :: showbase et std :: showpos dans chaque base, ils s'excluent essentiellement. C'est-à-dire: en décimal, aucune base n'est indiquée, et le «+» est ajouté sur des nombres positifs; Alors qu'en hexadécimal ou octal, la base est montrée, mais un '+' n'est pas affiché (ni un moins), car la valeur du type est imprimée comme si elle était coulée à un type non signé.

Par exemple, ce programme simple (verbeux):

#include <iostream>

int main() {
  std::cout << std::dec << std::showpos << std::showbase << int64_t(+5) << std::endl;
  std::cout << std::oct << std::showpos << std::showbase << int64_t(+5) << std::endl;
  std::cout << std::hex << std::showpos << std::showbase << int64_t(+5) << std::endl;
  std::cout << std::dec << std::showpos << std::showbase << int64_t(-5) << std::endl;
  std::cout << std::oct << std::showpos << std::showbase << int64_t(-5) << std::endl;
  std::cout << std::hex << std::showpos << std::showbase << int64_t(-5) << std::endl;
}

Donne cette sortie lorsqu'elle est compilée avec GCC:

+5
05
0x5
-5
01777777777777777777773
0xfffffffffffffffb

C'est ce à quoi je m'attendais toujours, après avoir utilisé C ++ depuis de nombreuses années, mais est-ce vraiment garanti par la norme, ou est-ce juste un comportement commun? Par exemple, un compilateur C ++ conforme standard pourrait-il sortir à la place une de ces séquences?

+5
+05
+0x5
-5
01777777777777777777773
0xfffffffffffffffb

ou même:

+5
+05
+0x5
-5
-05
-0x5

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top