numeric_limits 的问题
为什么这不起作用?
enum : long {MaxValue = std::numeric_limits<long int>::max()};
我收到错误:错误 1 错误 C2057:预期的常量表达式
它有什么不恒定的? long int 的限制在编译时就已知,那么问题是什么?
Why this doesn't work?
enum : long {MaxValue = std::numeric_limits<long int>::max()};
I'm getting error :Error 1 error C2057: expected constant expression
What isn't constant about it? Limits of long int are known at compile time so what's the problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
问题是,虽然 std::numeric_limits::max() 函数返回常量值,但它是在运行时调用,并且您在编译时需要常量值-time
也许你可以只使用
LONG_MAX
值来代替(请参阅climits 标题)?The problem is that although
std::numeric_limits<long int>::max()
function returns constant value it is called in run-time and you need constant value in compile-timeProbably you can just use
LONG_MAX
value instead (see climits header)?正如其他人所说,您需要一个常量表达式(函数不符合条件)。最终 C++1x 将支持更广泛的常量表达式,包括函数。请参阅 n2235 和 Bjarne Stroustrup 的 常见问题解答条目。
As the other have said, you need a constant expression (functions don't qualify). Eventually C++1x will support a wider range of constant expressions, including functions. See n2235 and Bjarne Stroustrup's FAQ entry.
是的,但是函数不能在编译时执行。
最大()
Yes, but a function cannot be executed at compile time.
max()