我想在类中定义一个常量,该值是最大可能的int.像这样的东西:
class A
{
...
static const int ERROR_VALUE = std::numeric_limits<int>::max();
...
}
Run Code Online (Sandbox Code Playgroud)
此声明无法使用以下消息进行编译:
numeric.cpp:8:错误:"的std :: numeric_limits :: MAX()"不能出现在一个常数表达式numeric.cpp:8:错误:一个函数调用不能出现在一个常数表达式
我理解为什么这不起作用,但有两件事对我来说很奇怪:
在我看来,在常量表达式中使用该值是一个自然的决定.为什么语言设计者决定使max()成为一个函数,从而不允许这种用法?
该规范在18.2.1中声称
对于在numeric_limits模板中声明为static const的所有成员,特化应以这样的方式定义这些值,使它们可用作整型常量表达式.
这不是说我应该能够在我的场景中使用它而不是它与错误信息相矛盾吗?
谢谢.
我想知道是否有人可以解释为什么背后的原因std::numeric_limit<T>::min并且max是函数而不是常量?
此外,我想知道可以使用哪些技术将min/max值用作模板参数的一部分,例如:
template<unsigned long long max>
class foo
{
public:
void boo() { std::cout << max << std::endl; }
};
.
.
.
foo<std::numeric_limits<int>::max()> f;
f.boo();
Run Code Online (Sandbox Code Playgroud)