...或者,换句话说,像这样初始化系统结构是否安全:
struct timespec ts[] = { {0, UTIME_OMIT}, {0, UTIME_OMIT} };
...
int r = utimensat(0, subPath.c_str(), ts, 0);
?
如果您只依赖 POSIX,那么不,不能保证您提供的初始化会产生您想要的效果。这是关于该结构类型的定义必须说的程度:
<time.h> 标头应声明 timespec 结构,该结构应至少包括以下成员:
time_t
tv_sec
秒。
long
tv_nsec
纳秒。
它没有指定这两个成员的相对顺序,也没有指定它们是第一个或唯一的成员,因此您的初始化程序依赖成员顺序是不安全的。
但是,POSIX 指定 C99 并通过引用将其合并,因此您可以使用指定的初始化程序来实现您想要的:
struct timespec ts[] = { { .tv_sec = 0, .tv_nsec = UTIME_OMIT},
{ .tv_sec = 0, .tv_nsec = UTIME_OMIT} };
或者,根据@Storyteller 的评论,如果您想用该语言编写,C++20 在该领域会赶上 C。然而,我承认,在我更仔细地查看问题的标签之前,我认为 C 是基于使用这种一般的初始化风格。