我可以在不创建临时变量的情况下从初始化返回结构吗?
Can I return structure right from initialisation without creating temporary variable?
我有一个函数,通常返回一些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] );
}
相关文章:
- 当返回语句时,逗号运算符、大括号初始化列表和 std::unique_ptr 组合在一起
- 在函数内初始化无符号字符指针将返回空指针
- 是否可以使用函数返回的值初始化数组
- 返回语句中矢量初始化时出现编译错误
- 我可以从取消引用"new"的返回值初始化引用吗
- Clang++ 6.0 内存清理器未报告返回值指示条件分支的函数中的未初始化局部变量
- 如果使用返回引用的函数初始化"auto"var,为什么它不声明引用类型?
- 由函数返回初始化的构造函数
- 为什么作为返回类型的右值引用不能初始化非常量引用?
- Android N libusb_init返回 -1 无法初始化 libusb
- 使用多个返回值初始化多个成员
- 我可以制作一个对象方法,如果单独调用,它将自行修改,但如果在复制初始化期间调用,则会返回一个新对象?
- C 标准:通过复制返回以初始化无RVO的参考:是否有任何副本
- DLL – 在 DLL 初始化时填充的静态向量,向客户端程序返回零大小
- 为什么教科书使用初始化列表作为操作员的返回值(复杂A)
- 如何初始化ccomsafearray,Safearray从脚本键返回
- 初始化对象时,可以丢弃新的返回值吗?
- 为什么make_tuple的实现不会通过大括号初始化返回?
- C++11 中的简单向量初始化返回奇怪的错误
- 我可以在不创建临时变量的情况下从初始化返回结构吗?