76 votes

À l’aide de ' auto ' tapez déduction - comment faire pour savoir quel type le compilateur déduit ?

Comment puis-je trouver ce type, le compilateur déduit lors de l'utilisation de l' auto mot-clé?

Exemple 1: Le Plus Simple

auto tickTime = 0.001;

A ce déduit en tant que float ou double?

Exemple 2: Plus complexe (et mon mal de tête):

typedef std::ratio<1, 1> sec;
std::chrono::duration<double, sec > timePerTick2{0.001};
 auto nextTickTime = std::chrono::high_resolution_clock::now() + timePerTick2;

De quel type est - nextTickTime?

Le problème que je vais avoir, c'est quand j'essaie d'envoyer nextTickTime de std::cout. J'obtiens l'erreur suivante:

./main.cpp: In function ‘int main(int, char**)':
./main.cpp:143:16: error: cannot bind ‘std::basic_ostream<char>' lvalue to ‘std::basic_ostream<char>&&'
  std::cout << std::setprecision(12) << nextTickTime << std::endl; // time in seconds
            ^
In file included from /usr/include/c++/4.8.2/iostream:39:0,
             from ./main.cpp:10:
/usr/include/c++/4.8.2/ostream:602:5: error:   initializing argument 1 of ‘std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<double, std::ratio<1l, 1000000000l> > >]'
 operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x)

112voto

marcin_j Points 12237

J’aime utiliser l’idée de C++ moderne efficace qui utilise un modèle non exécutés ; le type est sortie avec erreur du compilateur :

Maintenant pour la variable automatique `` , après sa définition, ajouter :

Et le message d’erreur montre de votre compilateur, il contiendra le type de `` .

34voto

JMcF Points 631

Une astuce de lo-fi qui ne nécessite aucune définition préalable d’assistance est :

Le compilateur va se plaindre que n’est pas un membre de n’importe quel type est.

9voto

CoffeeandCode Points 1123

Voici un version qui utilise pour obtenir le nom du type à l’exécution.

Qui imprime ceci sur mon système :

5voto

Matthew Fisher Points 2010

TypeId peut être utilisé pour obtenir le type de la variable majeure partie du temps. C’est le compilateur dépendante et je l’ai vu donner des résultats étranges. g ++ a RTTI par défaut, pas sûr du côté de Windows.

3voto

Jacob Krall Points 10327

Comme l’a dit Daniel Jour , lisez le message d’erreur :

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