我定义了一个typedef和:
typedef boost::geometry::model::d2::point_xy<double> boost2dPoint;
boost2dPoint min_p;
//.
//.(under a condition: min_p will be initialized)
//.
for(Region::Iterator itv = s.beginVer(); itv != s.endVer(); ++itv )
{
Region::Point v_point = (*itv).pnt();
if( (v_point(0) == min_p.x()) && (v_point(1) == min_p.y()) )
{
return *itv;
}
}
我收到了警告
‘min_p’ may be used uninitialized in this function [-Wmaybe-uninitialized]
如何检查min_p是否已初始化?
答案 0 :(得分:1)
你不能,至少不能单独使用那个对象。未初始化的数据没有特别标记,它只是没有指定的值。您可以将bool
标记最初设置为false
,并在true
初始化时将其设置为min_p
,但如果您要沿着这条路线行进,我建议使用boost::optional
:
// this is default-initialized to know that its
// data part (a boost2dpoint) is uninitialized
boost::optional<boost2dpoint> min_p;
// initialize later
if(some_condition()) {
min_p = boost2dpoint(foo, bar);
}
// use still later:
// Check if min_p has associated data.
if(min_p) {
for(Region::Iterator itv = s.beginVer(); itv != s.endVer(); ++itv )
{
Region::Point v_point = (*itv).pnt();
// +-- note: -> instead of . here. boost::optional is
// v designed to look like a pointer.
if( (v_point(0) == min_p->x()) && (v_point(1) == min_p->y()) )
{
return *itv;
}
}
}
我会留下the documentation的链接,这个链接不是很长。
答案 1 :(得分:0)
如果您尝试使用可能未初始化的变量,则会收到此警告。您需要为每个路径提供初始化。在声明变量时提供默认初始化,或在条件else
的情况下提供值。
答案 2 :(得分:0)
这不是运行时条件。
我的静态分析(编译时)令人失望。
只需初始化您的数据。
boost2dPoint min_p {};
或
boost2dPoint min_p (0,0);