当我到达网格的末尾时,我需要忽略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)
有没有办法可以做到这一点或完全绕过这个问题?
答案 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
子句避免迭代器不必要的来回。