整数的默认值?

时间:2012-06-20 20:15:56

标签: c++

我的程序需要在程序启动时将多个浮点数设置为默认数字。当程序运行时,这些整数将被设置为它们的真值。但是,这些真值可以是任何实数。我的程序将一直检查这些数字,以查看它们的值是否已从默认值更改。

例如,假设我有整数A,B,C。所有这些整数将在开始时设置为默认值(假设为-1)。然后随着程序的进行,让A和B分别设置为3和2。由于C仍处于默认值,因此程序可以得出结论,但尚未为C指定非默认值。

尝试查找唯一的默认值时会出现问题。由于数字的值可以设置为任何值,如果其设置的值与默认值相同,我的程序将不知道浮点数是否仍然具有默认值,或者其真值是否与默认值相同

我认为NULL是一个默认值,但在C ++中NULL等于0,导致同样的问题!

我可以创建一个由bool和float组成的整个对象作为成员,其中bool指示浮动是否已经分配了自己的值。然而,这似乎是一种矫枉过正。是否有一个默认值我可以设置我的浮点数,使得该值与任何其他值不相同? (例子包括无穷大或i)

我要求提供C / C ++解决方案。

8 个答案:

答案 0 :(得分:7)

  

我可以创建一个由bool和整数组成的整个对象   成员,其中bool表示该号码是否已分配   它自己的价值与否。然而,这似乎有点矫枉过正。

您所描述的内容在.NET中称为“nullable type”。 C ++实现是boost::optional

boost::optional<int> A;

if (A)
  do_something(*A);

答案 1 :(得分:5)

在二进制补码机器上,有一个整数值没有其他值那么有用:INT_MIN。你不能通过否定它来产生有效的正值。由于它是整数范围内最不实用的值,因此它是标记值的不错选择。它还有一个易于识别的十六进制值,0x80000000。

答案 2 :(得分:2)

没有位模式可以分配给不是实际int的int。如果你真的没有超出界限的整数值,你需要保留单独的标志。

答案 3 :(得分:1)

如果有效int值的域不受限制,则唯一的选择是指示是否已分配的管理位。

但是,你确定MAX_INT是一个理想的选择吗?

答案 4 :(得分:1)

无法保证您分配int的值不会等于另一个随机int。确保您想要发生的事情的唯一方法是创建一个单独的bool来解释变化。

答案 5 :(得分:1)

不,您必须创建自己的数据类型,其中包含有关是否已分配的信息。

答案 6 :(得分:0)

如果正如您所说,没有整数值不受限制,则您无法分配默认的“未初始化”值。如您在问题中所建议的那样,只需使用带有int和bool的结构。

答案 7 :(得分:0)

  

我可以创建一个由bool和整数组成的整个对象   成员,其中bool表示该号码是否已分配   它自己的价值与否。然而,这似乎有点矫枉过正。

我的第一个猜测是有效地使用标志并标记每个变量。但这当然不是你唯一的选择。

  1. 您可以使用指针(可以为NULL)并动态分配内存。不太方便。
  2. 您可以选择几乎从不使用的自定义值。然后,您可以将此值定义为默认值。有时候,你需要将这个值赋给你的浮点数,但是这种情况不会经常发生,你只需要跟踪这些变量。鉴于此类情况的发生,应该使用简单的链表。