C ++传递未初始化的变量

时间:2013-01-30 19:16:51

标签: c++ runtime initialization

当我到达网格的末尾时,我需要忽略C ++中未初始化的变量。

         pointMapIt++;
         float nextPointRow;
         if (pointMapIt != grid.points.end())
         {
             nextPointRow = 3.0;
             pointMapIt--;
         }

         if (point.dr != nextPointRow)
             //Do stuff

pointMapIt是一个通过我的网格点的迭代器。它会在每次迭代时检查nextPointRow。程序将在最后一次迭代时崩溃,因为nextPointRow将不会被设置。

我无法将nextPointRow设置为0.0,因为0.0是实际有效输入。事实上,我真的无法告诉nextPointRow会是什么。所以我真正需要的是能够(初始化nextPointRow和)检查nextPointRow是否为NULL,如下所示:

         if (nextPointRow != null && point.dr != nextPointRow)

有没有办法可以做到这一点或完全绕过这个问题?

2 个答案:

答案 0 :(得分:4)

最简单的可能是将nextPointRow设置为NAN

或者,在nextPointRow旁边有一个布尔标志,表示后者是否包含有效值。

另一种选择是重新安排你的代码:

     pointMapIt++;
     if (pointMapIt != grid.points.end())
     {
         float nextPointRow = 3.0;
         pointMapIt--;
         if (point.dr != nextPointRow) {
             //Do stuff

答案 1 :(得分:3)

你应该使用像Boost.Optional这样的东西:

boost::optional<float> nextPointRow;  // initially unset

if (condition) { nextPointRow = 3.0; }
else           { ++pointMapIt;       }

if (nextPointRow && nextPointRow != point.dr) { /* stuff */ }

此外,您应该使用else子句避免迭代器不必要的来回。