C++ 通过数值限制为枚举指定最大值?
在C++ 通过数值限制为枚举指定最大值?,c++,enums,limits,C++,Enums,Limits,在enummax值中分配元素时遇到问题。第一: protected: enum {DEFAULT_PADDING=std::numeric_limits<enum>::max()}; 受保护: 枚举{DEFAULT_PADDING=std::numeric_limits::max()}; 结果: /basecode.h:30:51:错误:应为标识符或“{” 枚举{DEFAULT_PADDING=std::numeric_limits::max()}; ^ ./baseco
enum
max值中分配元素时遇到问题。第一:
protected:
enum {DEFAULT_PADDING=std::numeric_limits<enum>::max()};
受保护:
枚举{DEFAULT_PADDING=std::numeric_limits::max()};
结果:
/basecode.h:30:51:错误:应为标识符或“{”
枚举{DEFAULT_PADDING=std::numeric_limits::max()};
^
./basecode.h:30:59:错误:应为类型
枚举{DEFAULT_PADDING=std::numeric_limits::max()};
(还有其他几个)
第二,转向:
protected:
enum {DEFAULT_PADDING=std::numeric_limits<unsigned int>::max()};
受保护:
枚举{DEFAULT_PADDING=std::numeric_limits::max()};
结果:
/basecode.h:30:27:错误:表达式不是整型常量表达式
枚举{DEFAULT_PADDING=std::numeric_limits::max()};
如何设置数值\u限制
给我一个值,我可以在编译时为枚举
使用该值
这个库比较旧,所以它支持很多旧的编译器和IDE。我需要的东西至少是C++03,最好是C++98 标准注意事项适用:这是一个简单的基于make的项目。它不使用Autotools,不使用Cmake,不使用Boost等等。在C++03中,它只是
静态的。在C++11中,它变成了静态的constexpr
。您需要后者才能在整型常量表达式中使用,因此只需使用编译即可ode>-std=c++11
就可以了
如果你不能使用C++11,你可以直接使用。在C++03中是简单的静态的
。在C++11中,它变成了静态的constexpr
。你需要后者才能在整型常量表达式中使用,因此只需使用-std=C++11
编译即可
如果你不能使用C++11,你可以直接使用。在C++03中是简单的静态的
。在C++11中,它变成了静态的constexpr
。你需要后者才能在整型常量表达式中使用,因此只需使用-std=C++11
编译即可
如果你不能使用C++11,你可以直接使用。在C++03中是简单的静态的
。在C++11中,它变成了静态的constexpr
。你需要后者才能在整型常量表达式中使用,因此只需使用-std=C++11
编译即可
如果你不能使用C++11,你可以直接使用。你是用-std=C++11
编译的吗?数值限制::max
声明为静态
,而enum需要常量。@Jonathan-如果它不是常量,我会感到惊讶。你是说它在运行时会发生变化吗?@Barry-我添加了额外的信息。简言之,我需要C++03和C++11。我也需要C++98。请看一看-constepr
被添加到语言中,使函数能够在编译时进行求值。简单地将函数标记为返回const
不足以使其成为编译时常量-如果是,则constepr
将是多余的ler可能会将max()
优化为一个常数(而且可能会)但是这还不足以满足enum
的要求。你是用-std=c++11
编译的吗?数值限制::max
声明为静态,而enum需要常量。@乔纳森-如果它不是常量,我会感到惊讶。你是说它在运行时会发生变化吗?@Barry-我添加了额外的I信息。简言之,我需要C++03和C++11。我也需要C++98。请看一看-constexpr
被添加到语言中,使函数能够在编译时进行计算。简单地将函数标记为返回const
不足以使其成为编译时常量-如果是,constexpr
冗余。编译器可能会将max()
优化为一个常量(并且可能会)但是这还不足以满足enum
的要求。你是用-std=c++11
编译的吗?数值限制::max
声明为静态,而enum需要常量。@乔纳森-如果它不是常量,我会感到惊讶。你是说它在运行时会发生变化吗?@Barry-我添加了额外的I信息。简言之,我需要C++03和C++11。我也需要C++98。请看一看-constexpr
被添加到语言中,使函数能够在编译时进行计算。简单地将函数标记为返回const
不足以使其成为编译时常量-如果是,constexpr
冗余。编译器可能会将max()
优化为一个常量(并且可能会)但是这还不足以满足enum
的要求。你是用-std=c++11
编译的吗?数值限制::max
声明为静态,而enum需要常量。@乔纳森-如果它不是常量,我会感到惊讶。你是说它在运行时会发生变化吗?@Barry-我添加了额外的I信息。简言之,我需要C++03和C++11。我也需要C++98。请看一看-constexpr
被添加到语言中,使函数能够在编译时进行计算。简单地将函数标记为返回const
不足以使其成为编译时常量-如果是,constexpr
冗余。编译器可能会将max()
优化为一个常量(并且可能会)但这还不足以满足enum
的要求。请注意,在VC++2013中,它仍然是静态的
,因此依赖于编译器。这个库很旧,它支持很多旧的编译器和IDE。我需要C++98、C++03和C++11。numeric\u limits
是用于此工作的错误工具吗?(我认为应该在C++中使用它)。enum
很好。正如numeric\u limits
一样。在C++11之前,你不能将两者结合起来。numeric\u limits
不会在编译时计算