C++:定义类的最大/最小限制

标签 c++ constants limits

我创建了一个类,它在可变粒度的每日时间表中模拟时间段,例如,第一个时间段是 30 分钟,但第二个时间段可以是 40 分钟,第一个可用时间段从 (一个值相当于)1.

我现在想做的是以某种方式定义此类所允许的最大和最小允许值,为此我有两个实际问题:

1.- 以这种方式为自定义类定义绝对最小值和最大值是否有意义?或者更好的是,在给定类的已定义关系运算符的情况下,一个值总是低于该类型的任何其他可能值是否足以定义为最小值? (和最大值类似)

2.- 假设前一个问题的答案以"is"(或“是,但...”)为模型,如何定义这样的最大/最小值?我知道有 std::numeric_limits<>但从我读到的内容来看,它适用于“数字类型”。我是将其解释为“以数字表示”的意思,还是可以做出更广泛的假设,例如“以数字表示”或“与整数对应”?毕竟,定义日期类的最小值和最大值是有意义的,也许是字典类,但是 numeric_limits可能不适用于这些用途(我对此没有太多经验)。另外,numeric_limits有很多额外的成员和信息,我不知道该用它们做什么。如果我使用numeric_limits , C++ 提供了哪些其他众所周知/广泛使用的机制来指示类的可用值范围?

最佳答案

无法理解您的问题。我认为您要问的是,对类的域(可以提供给它并有意义的数据)保持自信是否有意义,如果是这样,如何保持自信。

第一个有一个非常明确的答案:是的,绝对。您希望您的类(class)是“......正确使用容易,错误使用困难”。这包括确保类(class)的客户在做错事时被告知。

第二个答案不太明确。大多数时候,您只想使用 assert() 函数来断言函数或类的域。其他时候你会想抛出一个异常。有时你想两者都做。当性能可能成为问题时,有时您希望提供一个两者都不做的接口(interface)。通常,您希望提供一个至少可以进行检查的接口(interface),以便客户端在尝试将其提供给您的类或函数之前可以判断什么是有效/无效输入。

您可能想要同时使用 assert 和 throw 的原因是因为抛出异常会破坏堆栈信息并使调试变得困难,但 assert 仅在构建期间发生并且实际上不会做任何事情来保护您免受运行计算或做一些事情可能导致崩溃或使数据无效。因此,断言然后抛出通常是最好的答案,这样您就可以在测试时遇到它时进行调试,但在这些错误被搁置时仍然可以保护用户。

对于您的类(class),您可能会考虑几种提供最小值/最大值的方法。一种是在类的接口(interface)中提供最小/最大函数。另一个可能是使用外部功能,是的,numeric_limits 可能只是因为范围有时是一种数字数量。您甚至可以在您的类中提供一个具有 validate_input() 函数的更通用的接口(interface),以便您可以进行任何可能合适的比较。

问题的第二部分有很多有效答案,具体取决于很多变量,包括个人品味。

关于C++:定义类的最大/最小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2876242/

相关文章:

c++ - C 和 C++ 调用约定之间有什么区别?

c++ - 是否可以在 qmake .pro 文件中设置 visual studio 项目属性?

c++ - 最佳实践 : file open/close operations

c# - C# Web 应用程序中的常量

http - URL中的参数和<form method ="get">有什么区别吗?

c++ - 如何编写 Const 和 Mutable 重载代码?

c++ - 在初始化列表中初始化一个常量大小的数组

C++ extern const char* 没有按预期工作

Python、Matplotlib : Normalising multiple plots to fit the same arbitrary axis limits

c++ - 整数溢出和整数限制