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

C++ 我可以在初始化时直接返回结构而不创建临时变量吗?,c++,c++11,C++,C++11,我有一个函数,通常返回一些点结构: /** 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[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];
}
我需要用一些可以返回的结构初始化来替换
。我唯一能想到的就是制作
const
属性:

const Point ZERO_POINT = {0,0};
虽然这可能是我将要做的,但我想知道是否有一种方法可以初始化结构并立即返回它,例如在使用一些现有变量生成结构时


此外,您必须假设无法更改原始结构。我问的是关于
C++11
标准,以及Visual Studio 2010(尽管它支持大多数C++11)。

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

return {0,0};
如果不支持统一初始化,则在
结构上定义构造函数并显式调用它:

return Point(0, 0);

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

return {0,0};
如果不支持统一初始化,则在
结构上定义构造函数并显式调用它:

return Point(0, 0);

既然你想保存行,这里有一行

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

既然你想保存行,这里有一行

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

那么您想返回一个
,而不为其分配内存?即使您
返回点{0,0},这样的临时文件仍将被复制/移动并为其分配内存。不,我不是在保存内存,而是在保存代码行。此外,一行语法比四行语法更容易阅读。@black我回滚了编辑,如果您想在进行解释的同时更改标记。那么您想返回一个
点而不为其分配内存吗?即使您
返回点{0,0},这样的临时文件仍将被复制/移动并为其分配内存。不,我不是在保存内存,而是在保存代码行。还有一个线性语法比4行更容易阅读。@ Black我回滚编辑,如果你想改变标签,伴随着这样的解释。如果我都不工作,我应该假设编译器不支持这个C++特性吗?@胡席佐:第一个应该为C++ 11编译器工作,支持统一的初始化支持。VS2010不是其中之一。第二个不需要C++ 11,但是需要明确定义<代码>点/代码>结构的构造函数,这两个参数。如果两个参数都不适用于我,那么我应该假设编译器不支持这个C++特性吗?胡:第一个应该为C++ 11编译器工作,并有统一的初始化支持。VS2010不是其中之一。第二个不需要C++11,但您需要为接受这两个参数的
结构明确定义构造函数。