Comment mettre correctement en fonte time_t à long int?
Je suis encore à apprendre à propos de la conversion de type en C++ et je suis actuellement en train de faire ce
long int t = time(NULL);
Je suis en utilisant VS2013 remarqué que la conversion à partir de 'time_t' à 'long' avertissement donc j'ai pensé type de voter pour elle;
long int t = static_cast<long int> time(NULL);
Toutefois, cela ne fonctionne pas encore, combinant une statique de fonte et d'un style C cast fonctionne
long int t = static_cast<long int> (time(NULL));
Je me demandais juste si quelqu'un pouvait m'éclairer sur ce point?
Qu'essayez-vous de réaliser?
Ce n'est pas "combinant une statique de fonte et d'un style C cast", c'est juste la syntaxe correcte pour une charge statique exprimés, ce qui nécessite
Merci, j'ai complètement raté l'obligation de mettre un statique de la fonte de la valeur dans la parenthèse. J'ai appris pas quelque chose de nouveau.
Au lieu de se contenter de restreindre le résultat de la gamme de
Ah merci, je n'avais pas pensé à ça
Ce n'est pas "combinant une statique de fonte et d'un style C cast", c'est juste la syntaxe correcte pour une charge statique exprimés, ce qui nécessite
()
autour de son argument.Merci, j'ai complètement raté l'obligation de mettre un statique de la fonte de la valeur dans la parenthèse. J'ai appris pas quelque chose de nouveau.
Au lieu de se contenter de restreindre le résultat de la gamme de
long
, qui toujours (en 2014) vous laisse de nombreuses années des dates futures, vous pourriez lancer à unsigned char
, que le raccourcissement de l'intervalle de seulement 255 secondes en 1970.Ah merci, je n'avais pas pensé à ça
OriginalL'auteur Ryan Singh | 2015-01-20
Vous devez vous connecter pour publier un commentaire.
time(NULL)
n'est pas un casting, mais un appel à une fonction qui retournetime_t
. Depuistime_t
n'est pas exactement du même type quelong int
, vous voyez l'avertissement.En outre,
static_cast<T>(value)
nécessite la parenthèse, c'est pourquoi votre première version ne fonctionne pas.Vous ne pouvez pas marquer?
Il dit que je peux accepter une réponse en deux minutes. Je vais le faire après ces deux minutes.
Ah oui, j'ai manqué de temps...
OriginalL'auteur Sebastian Dressler
Votre question contient la réponse. Le
static_cast
méthode générique dans le code que vous fournissez prend latime_t
type en entrée et le convertit en unlong int
que sa valeur de retour. Ce code ne contient pas de C-type de style de fonte.De conversion de Type doit également travailler trop, parce que time_t est un type arithmétique et la C opérateur de cast va effectuer la promotion de la
long int
type.Ce casting tutoriel peut-être une lecture intéressante pour vous.
OriginalL'auteur Evil Dog Pie
Un
time_t
valeur est le nombre de secondes depuis le début de l'1 Jan 1970. Casting que pour 32-bitlong
vous donc de vous limiter à des valeurs représentant les valeurs de temps de avant l'an 2038, à peu près. Ce n'est pas une bonne idée, et la ungoodness c'est la raison de votre alerte.La tentative d'expression
est juste une syntaxe non valide. Un
static_cast
nécessite une parenthèse avec la valeur.OriginalL'auteur Cheers and hth. - Alf