我还在学习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));
我只是想知道是否有人可以帮助阐明这一点?
答案 0 :(得分:6)
time(NULL)
不是强制转换,而是返回time_t
的函数调用。由于time_t
与long 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
需要带有值的括号。