如何正确地将 time_t 转换为 long int?
How to correctly cast time_t to long int?
我仍在学习 C++ 中的类型转换,我目前正在这样做
long int t = time(NULL);
我正在使用 VS2013 并注意到从 'time_t' 到 'long' 的转换警告,所以我想我会输入强制转换它看起来像;
long int t = static_cast<long int> time(NULL);
然而,这还行不通,但结合静态转换和 C 风格转换仍然有效
long int t = static_cast<long int> (time(NULL));
我只是想知道是否有人可以帮助阐明这一点?
time(NULL)
不是强制转换,而是 returns time_t
的函数调用。由于 time_t
与 long int
的类型不完全相同,您会看到警告。
此外,static_cast<T>(value)
需要括号,这就是为什么您的第一个版本不起作用的原因。
A time_t
值是自 1970 年 1 月 1 日开始以来的秒数。将其转换为 32 位 long
因此您将自己限制为表示时间值的值 before the year 2038 , 大致。这不是一个好主意,它的缺点是你发出警告的原因。
尝试表达
static_cast<long int> time(NULL)
只是无效的语法。 static_cast
需要带括号的值。
您的问题包含答案。您提供的代码中的 static_cast
泛型方法将 time_t
类型作为其输入并将其转换为 long int
作为其 return 值。此代码不包含 C 风格的类型转换。
long int t = static_cast<long int> (time(NULL));
类型转换也应该有效,因为 time_t 是算术类型,C 转换运算符将执行到 long int
类型的提升。
long int t = (long int)time(NULL);
这篇 casting tutorial 对您来说可能是一本有趣的读物。
我仍在学习 C++ 中的类型转换,我目前正在这样做
long int t = time(NULL);
我正在使用 VS2013 并注意到从 'time_t' 到 'long' 的转换警告,所以我想我会输入强制转换它看起来像;
long int t = static_cast<long int> time(NULL);
然而,这还行不通,但结合静态转换和 C 风格转换仍然有效
long int t = static_cast<long int> (time(NULL));
我只是想知道是否有人可以帮助阐明这一点?
time(NULL)
不是强制转换,而是 returns time_t
的函数调用。由于 time_t
与 long int
的类型不完全相同,您会看到警告。
此外,static_cast<T>(value)
需要括号,这就是为什么您的第一个版本不起作用的原因。
A time_t
值是自 1970 年 1 月 1 日开始以来的秒数。将其转换为 32 位 long
因此您将自己限制为表示时间值的值 before the year 2038 , 大致。这不是一个好主意,它的缺点是你发出警告的原因。
尝试表达
static_cast<long int> time(NULL)
只是无效的语法。 static_cast
需要带括号的值。
您的问题包含答案。您提供的代码中的 static_cast
泛型方法将 time_t
类型作为其输入并将其转换为 long int
作为其 return 值。此代码不包含 C 风格的类型转换。
long int t = static_cast<long int> (time(NULL));
类型转换也应该有效,因为 time_t 是算术类型,C 转换运算符将执行到 long int
类型的提升。
long int t = (long int)time(NULL);
这篇 casting tutorial 对您来说可能是一本有趣的读物。