我可以在不创建临时变量的情况下从初始化返回结构吗?

Can I return structure right from initialisation without creating temporary variable?

本文关键字:初始化 返回 结构 情况下 创建 变量 我可以      更新时间:2023-10-16

我有一个函数,通常返回一些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)。

如果编译器支持c++ 11统一初始化并且不需要显式定义Point构造函数,则以下操作应该可以工作:

return {0,0};

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

return Point(0, 0);

由于您想要保存行,这里有一行

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