【问题标题】:Creating a digit Datatype with restriction, an int between -10 and 10 [duplicate]创建一个带限制的数字数据类型,一个介于 -10 和 10 之间的 int [重复]
【发布时间】:2019-01-10 20:05:48
【问题描述】:

我的应用程序中确实需要一个新的数据类型,它只存储从 -10 到 10 的数字。有没有办法创建具有特定值的数据类型,如果值无效会引发错误?我用过:

typedef int digit;

发生的事情是创建了一个实际上是 int 的新数据类型。 我也试过这个:

typedef int{-10 > int value < 10} digit;

但它提出了这个:

exit status 1
main.cpp:3:12: error: expected unqualified-id before '{' token
typedef int{-10 > int value < 10} digit;
           ^
main.cpp:3:35: error: 'digit' does not name a type; did you mean 'div_t'?
typedef int{-10 > int value < 10} digit;
                                    ^~~~~
                                  div_t

【问题讨论】:

  • C++ 不是 ADA。基本类型不可能。您可以编写一个类来处理数据类型。您可以重载大多数运算符,从而以自定义方式处理溢出。
  • 还有其他方法吗?
  • 嗨@Kamil,请使用答案部分的答案谢谢
  • 这可能是一个不错的功能

标签: c++ types


【解决方案1】:

C++ 没有这样的特性。在某些情况下会非常好,但在语言中提供并非微不足道(并且在某种程度上使用效率低下)。

您可以创建一个包装int 的类并进行自己的边界检查(或者您希望该类型的行为)。然后,您也必须包装所有算术运算。不是太累,就是脖子有点疼。而且,同样,效率不高(每个算术运算都需要一个分支!)。

通常我们只使用int 并在需要时在更高级别检查我们的代码逻辑。在不了解您的用例的情况下,我无法提出具体建议。

Here's an example 完成了一半。

【讨论】:

  • 谢谢,可以了
  • @AndriiChumakov 它并不能满足您的所有需求;它只验证初始值
  • 我明白,我将能够附加一个更大的数字(如 11)的新值,因为此代码仅在分配之前检查数字的值。
  • @AndriiChumakov 不完全是——获得值的唯一方法是,嗯,按值,并且涉及转换回int,因此范围检查类型实际上是不可变的。将其转换回该类型,您将获得另一个范围检查。这可能适合也可能不适合您的目的。
  • 好的,我去看看有没有用
猜你喜欢
  • 2016-05-31
  • 2013-11-08
  • 2018-11-12
  • 2011-08-11
  • 1970-01-01
  • 2012-03-16
  • 2015-01-02
  • 2014-05-13
  • 1970-01-01
相关资源
最近更新 更多