我可以从引用传递的参数返回值中声明const int吗

Can I declare const int from reference passed parameter return values?

本文关键字:声明 const int 返回值 参数 引用 我可以      更新时间:2023-10-16

我想知道是否可以以某种方式将以下整数声明为常量。它们的值在下面的函数中只更改过一次。

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.xoffset.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局部变量不是常量表达式,用处不大;唯一的目的是稍后检测意外修改,但如果您的函数过于复杂,以至于您无法一眼判断是否发生了这种情况,那么重构该函数可能会更好。