更新:
是:错误时,参数time()
和返回值均为-1
。我在answer below中添加了GNU代码。
原始问题:
time()
函数声明为:std::time_t time(std::time_t* arg);
如果arg
返回time()
,-1
是否会更新?
time_t arg = 42;
time_t result = time(&arg);
cout << "arg: " << arg << ", result: " << result << endl;
此返回arg: 42, result: -1
或arg: -1, result: -1
吗?
https://en.cppreference.com/w/cpp/chrono/c/time状态:
返回编码为
std::time_t
对象的当前日历时间,并将其存储在arg
指向的对象中,除非arg
是null
指针。 / p>返回值:
当前日历时间成功编码为
std::time_t
对象,错误则编码为(std::time_t)(-1)
。如果arg不是null
,则返回值也存储在arg
指向的对象中。
http://www.cplusplus.com/reference/ctime/time/状态:
获取当前日历时间作为
time_t
类型的值。该函数返回该值,并且如果参数不是
null
指针,则该函数还将此值设置为arg
所指向的对象。返回值:
如果参数不是空指针,则返回值与参数计时器所指向的位置中存储的返回值相同。
如果该函数无法检索日历时间,则返回值-1。
如果要设置arg
,无论函数是否返回-1
,我是否应该跳过初始化变量?
time_t arg; // not initialized
time_t result = time(&arg);
答案 0 :(得分:3)
在7.27.2.4/3中,C11标准(C ++标准指的是C库函数)表示:
time
函数将实现的最佳近似值返回到当前值 日历时间。如果未设置日历时间,则返回值(time_t)(-1)
可用。 如果timer
不是空指针,则还将返回值分配给它指向的对象。
因此,在您的代码中将始终写入arg
的值,而无需初始化它。
请注意,最好是完全省略它并写上time_t result = time(NULL);
。
答案 1 :(得分:0)
参数将在错误时返回-1
。
GNU time.c的定义如下:
/* Return the current time as a `time_t' and also put it in *T if T is
not NULL. Time is represented as seconds from Jan 1 00:00:00 1970. */
time_t
time (time_t *t)
{
struct timeval tv;
time_t result;
if (__gettimeofday (&tv, (struct timezone *) NULL))
result = (time_t) -1;
else
result = (time_t) tv.tv_sec;
if (t != NULL)
*t = result;
return result;
}