gpt4 book ai didi

c++ - 初始化一个全局的 const POD 结构;针对特定成员

转载 作者:行者123 更新时间:2023-11-30 01:46:52 25 4
gpt4 key购买 nike

http://pubs.opengroup.org/onlinepubs/007908799/xsh/time.h.html说是

The header declares the structure timespec, which has at least the following members: time_t tv_sec seconds long tv_nsec nanoseconds

我正在用 C++ 处理这个问题,我想执行以下操作:

//global scope
const /*struct*/ timespec ARMAGEDDON = {
.tv_sec = std::numeric_limits<decltype((timespec().tv_sec))>::max(),
.tv_nsec = std::numeric_limits<decltype((timespec().tv_nsec))>::max(),
};

虽然 C++ 允许我相当灵活地获取各个结构成员的最大值(据我所知,这与普通 C 不同),但我不能使用 .member = value, C 语法来解决我想要的特定成员。

const /*struct*/ timespec ARMAGEDDON = {
std::numeric_limits<decltype((timespec().tv_sec))>::max(),
std::numeric_limits<decltype((timespec().tv_nsec))>::max(),
};

碰巧编译了,但是 AFAIK,这初始化了前两个成员。API 提供者没有说 .tv_sec.tv_nsec 是前两个成员。

在 C++ 中初始化结构的正确方法是什么?

最佳答案

如果您不想弄乱您的全局命名空间并希望拥有类似于 C 风格的初始化,您始终可以使用 lambda 表达式构造和对象。

const timespec ARMAGEDDON = []() -> timespec {
timespec result;
result.tv_sec = std::numeric_limits<decltype(result.tv_sec)>::max();
result.tv_nsec = std::numeric_limits<decltype(result.tv_nsec)>::max();
return result;
}();

编辑:如果您的编译器是最新的,您应该能够使用稍微短一些的结构:

const timespec ARMAGEDDON = [](){
timespec result;
result.tv_sec = std::numeric_limits<decltype(result.tv_sec)>::max();
result.tv_nsec = std::numeric_limits<decltype(result.tv_nsec)>::max();
return result;
}();

关于c++ - 初始化一个全局的 const POD 结构;针对特定成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32509487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com