我的程序需要在程序启动时将多个浮点数设置为默认数字。当程序运行时,这些整数将被设置为它们的真值。但是,这些真值可以是任何实数。我的程序将一直检查这些数字,以查看它们的值是否已从默认值更改。
例如,假设我有整数A,B,C。所有这些整数将在开始时设置为默认值(假设为-1)。然后随着程序的进行,让A和B分别设置为3和2。由于C仍处于默认值,因此程序可以得出结论,但尚未为C指定非默认值。
尝试查找唯一的默认值时会出现问题。由于数字的值可以设置为任何值,如果其设置的值与默认值相同,我的程序将不知道浮点数是否仍然具有默认值,或者其真值是否与默认值相同
我认为NULL是一个默认值,但在C ++中NULL等于0,导致同样的问题!
我可以创建一个由bool和float组成的整个对象作为成员,其中bool指示浮动是否已经分配了自己的值。然而,这似乎是一种矫枉过正。是否有一个默认值我可以设置我的浮点数,使得该值与任何其他值不相同? (例子包括无穷大或i)
我要求提供C / C ++解决方案。
答案 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表示该号码是否已分配 它自己的价值与否。然而,这似乎有点矫枉过正。
我的第一个猜测是有效地使用标志并标记每个变量。但这当然不是你唯一的选择。