【发布时间】:2018-03-27 12:05:18
【问题描述】:
我不小心将默认可初始化的struct 输入到std::numeric_limits<somestruct>::infinity()。我得到的是一个默认结构。
为什么标准允许 this 编译并返回如此意外的值?
#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;
}
【问题讨论】:
-
您缺少一个头文件。它在不包含
<limits>的情况下构建纯属巧合。而你得到的回报是什么是? -
@Someprogrammerdude: "一个默认结构"
-
您还期待什么?您没有告诉计算机对于您的
somestruct类型而言“无限”意味着什么。 -
@LightnessRacesinOrbit 我可能在吹毛求疵,但“默认结构”不是“值”。
-
@Someprogrammerdude:这里它似乎是“我的班级的一个实例
somestruct及其唯一成员默认初始化”的缩写
标签: c++ templates language-lawyer std c++17