我想知道是否可以以某种方式将以下整数声明为常量。它们的值在下面的函数中只更改过一次。
int32_t offset_x, offset_y;
frame1.get()->enlargeForMerge(frame2.get(), offset_x, offset_y);
void SlpFrame::enlargeForMerge(const SlpFrame &frame, int32_t &os_x, int32_t &os_y)
有没有一些lambda之类的东西可以让我有这样的东西:
const int32_t offset_x, offset_y => magic[1, 2]()
frame1.get()->enlargeForMerge(frame2.get(), offset_x, offset_y);
与第一段代码的唯一区别是,从现在起,偏移整数是常量。我看了一眼lambda文档,但我无法理解。
如何处理中间变量。
const auto offset = [&](){
int32_t offset_x;
int32_t offset_y;
frame1.get()->enlargeForMerge(frame2.get(), offset_x, offset_y);
return std::make_pair(offset_x, offset_y);
}();
const int32_t offset_x = offset.first;
const int32_t offset_y = offset.second;
您可以编写:
struct Offset { int x, y; };
然后:
const Offset offset = bla();
其中,函数返回Offset,或者可以让它返回pair
并将其转换为Offset或其他类型。
然后可以使用offset.x
和offset.y
而不是offset_x
等
另一种选择是:
const std::pair<int32_t, int32_t> offsets = bla();
int32_t const &offset_x = offsets.first;
int32_t const &offset_y = offsets.second;
最后,另一种选择是不使用const
,继续做你正在做的事情。IMHO、const
局部变量不是常量表达式,用处不大;唯一的目的是稍后检测意外修改,但如果您的函数过于复杂,以至于您无法一眼判断是否发生了这种情况,那么重构该函数可能会更好。