我可以在初始化时返回结构而不创建临时变量吗?

时间:2015-09-16 12:24:02

标签: c++ c++11

我有一个通常返回一些Point结构的函数:

/** Assume:
     private std::vector<Point> points_ **/
Point MyPoints::getLastPoint() const {
    //I need to return [0, 0] if there's no data
    if(points_.empty())
         return ???;
    else
         return points[points.size()-1];
}

结构真的很简单:

struct Point {uint_32 x, uint_32 y}

我需要将???替换为可以返回的结构初始化。我唯一能想到的就是制作const属性:

const Point ZERO_POINT = {0,0};

虽然这可能是我所做的,但我想知道是否有一种方法来初始化结构并立即返回它,例如从一些现有变量生成结构时。

此外,您必须假设您无法改变原始结构。我问及C++11标准,并使用Visual Studio 2010(虽然支持大多数C ++ 11)。

2 个答案:

答案 0 :(得分:3)

如果编译器支持C ++ 11统一初始化并且不需要显式定义Point构造函数,则以下内容应该有效:

return {0,0};

如果不支持统一初始化,则在Point结构上定义构造函数并明确调用它:

return Point(0, 0);

答案 1 :(得分:1)

由于你想保存线路,这里是一行

Point MyPoints::getLastPoint() const 
{
      return ( points_.empty() ? Point{0, 0} : points[points_.size() - 1] );
}