我意外地将默认初始化struct
提供给std::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;
}
答案 0 :(得分:15)
&#34;为什么&#34;问题众所周知是无法回答的,但直接的答案是:it's specified:
namespace std { template<class T> class numeric_limits { // ... static constexpr T infinity() noexcept { return T(); } // ... }; }
使用infinity()
has_infinity != false
:
对
的所有专精都有意义numeric_limits<somestruct>::has_infinity
在您的情况下,false
为infinity()
,因此MailApp.sendEmail(emailAdd, subject, message, {attachments: [theBlob]});
没有意义。
答案 1 :(得分:5)
根据C ++ 17 [numeric.limits] / 1,相关函数的默认值为:
static constexpr T infinity() noexcept { return T(); }
您还没有定义任何专业化,因此您将获得默认值。