【发布时间】:2019-01-24 14:06:47
【问题描述】:
如果你错误地做了类似的事情:
#include<limits>
int arr[3];
auto x = std::numeric_limits<decltype(arr[0])>::max();
您将从 STL 实现中的文件中获得无用的错误消息。
问题是模板参数是一个引用,所以解决方法是删除它:
auto x = std::numeric_limits<std::remove_reference_t<decltype(arr[0])>>::max();
现在我的问题是为什么numeric_limits 不知道自己做这个?
我会理解您不想删除指针(因为 max 的 char 指针和 char 的 max 是非常不同的东西),但我会假设每当你有一个引用作为参数numeric_limits 你会很高兴通过删除它获得结果。
【问题讨论】:
-
您想要一个因为标准这么说的答案,还是在寻找委员会决定不定义
std::numeric_limits<int&>的原因? -
我想知道这是否只是一个“懒惰”的标准,还是存在语言限制会导致问题的实现,因为我认为它应该是......
-
我认为这归结为这对指针的意义。引用可以实现为指针,因此它应该限制它可以保存的地址或它所引用的东西的限制。我真的没有一个好的答案。
-
虽然它可能有用,但定义引用的数字限制似乎没有意义。
int&更像是指向int的指针,而不是int本身。 -
我同意你的观点,让 numeric_limit
或 numeric_limit 等同于 numeric_limit 是有意义的,这样它可以与 sizeof、alignof、typeid、tuple_size 保持一致, 元组元素。
标签: c++ templates numeric-limits