如何在C++ double或int变量中存储某种"null"?

jlc*_*lin 13 c++ null c++11

我有一个看起来像这样的课程

struct A {
     double a1;
     int b1;
     double a2;
     int b2;
};
Run Code Online (Sandbox Code Playgroud)

我要读出一个文件值a1,b1,a2,和b2.大多数情况下,所有四个数字都在文件中,但有时只有两个数字.

当有两个数字时,我想将值存储在a1,b1并且我想在" a2和"中存储"无" b2.如果a2b2为指针,我可以将它们分配是nullptr,但他们不是指针.

有什么我可以存储doubleint变量,以表明"没有"存储?

我知道Boost.Optional是可用的,但我正在努力避免使用该库.

小智 9

您可以将NAN分配给double a2,这也表示int b2无效.

此页面用于NAN用法.

  • 这似乎是一个合理的解决方案.`std :: numeric_limits <double> :: quiet_NaN()`和`std :: nan("1")`之间有什么不同? (2认同)

Pet*_*Guo 5

你不能。我可以想到两种替代方法:

  1. 使用 int *; 或者
  2. 使用在您的上下文中肯定无效的值。例如,如果它永远不能为负数,则使用 -1 表示为空。但我仍然更喜欢第一种方式,因为它的正确性不取决于需求或上下文。

  • @matsjoyce:在不需要的地方引入动态分配可能是一个坏主意,至少对于性能而言。 (2认同)