gpt4 book ai didi

c++ - 为什么 std::numeric_limits::infinity() "work"?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:02 26 4
gpt4 key购买 nike

我不小心输入了一个默认的可初始化对象 structstd::numeric_limits<somestruct>::infinity() .我得到的是一个默认结构。

为什么标准允许它编译并返回这样一个意想不到的值?

#include <iostream>

struct somestruct {
uint64_t a = 7;
};

inline ::std::ostream& operator <<(::std::ostream& s, const somestruct& q) {
s << q.a;
return s;
}

int main(int argc, char **argv) {
constexpr const auto inf = ::std::numeric_limits<somestruct>::infinity();
std::cout << inf << std::endl;
return 0;
}

Godbolt for compilation验证

最佳答案

众所周知,“为什么”的问题是无法回答的,但直接的答案是:就是这样 it's specified :

namespace std {
template<class T> class numeric_limits {
// ...
static constexpr T infinity() noexcept { return T(); }
// ...
};
}

随着extra textinfinity()是:

Meaningful for all specializations for which has_­infinity != false

在你的例子中,numeric_limits<somestruct>::has_infinityfalse , 所以 infinity()没有意义。

关于c++ - 为什么 std::numeric_limits<SomeStruct>::infinity() "work"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49512419/

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