2

当我到达网格的末尾时,我需要忽略 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)

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

4

2 回答 2

4

最简单的可能是设置nextPointRowNAN.

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

另一种选择是重新排列您的代码,如下所示:

     pointMapIt++;
     if (pointMapIt != grid.points.end())
     {
         float nextPointRow = 3.0;
         pointMapIt--;
         if (point.dr != nextPointRow) {
             //Do stuff
于 2013-01-30T19:18:23.413 回答
3

您应该为此使用 Boost.Optional 之类的东西:

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

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

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

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

于 2013-01-30T19:23:31.593 回答