如何正确地将time_t转换为long int?

时间:2015-01-20 12:16:24

标签: c++ casting

我还在学习C ++中的类型转换,而我现在正在这样做

long int t = time(NULL);

我正在使用VS2013并注意到来自&time;' time_t'长期'警告所以我以为我会输入它看起来像;

long int t = static_cast<long int> time(NULL);

然而,这还没有结合静态演员和C风格演员

long int t = static_cast<long int> (time(NULL));

我只是想知道是否有人可以帮助阐明这一点?

3 个答案:

答案 0 :(得分:6)

time(NULL)不是强制转换,而是返回time_t的函数调用。由于time_tlong int的类型不完全相同,因此您会看到警告。

此外,static_cast<T>(value)需要括号,这就是您的第一个版本不起作用的原因。

答案 1 :(得分:2)

您的问题包含答案。您提供的代码中的static_cast泛型方法将time_t类型作为其输入,并将其转换为long int作为其返回值。此代码不包含C风格的类型转换。

long int t = static_cast<long int> (time(NULL));

类型转换也应该有效,因为time_t是算术类型,C转换运算符将执行促销到long int类型。

long int t = (long int)time(NULL);

casting tutorial可能对您有用。

答案 2 :(得分:0)

time_t值是自1970年1月1日开始以来的秒数。将其转换为32位long因此您将自己限制为代表时间值before the year 2038的值,大致。这不是一个好主意,它的不良之处是你警告的原因。


尝试过的表达

static_cast<long int> time(NULL)

只是无效的语法。 static_cast需要带有值的括号。