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,但您需要为接受这两个参数的点
结构明确定义构造函数。