我可以根据引用传递的参数 return 值声明 const int 吗?

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

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

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();

你的函数要么 return 是一个 Offset ,要么你可以让它 return 一个 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 并继续做您正在做的事情。恕我直言,const 不是常量表达式的局部变量用处不大;唯一的目的是稍后检测意外修改,但如果您的函数非常复杂以至于您无法一眼看出是否发生了这种情况,那么重构函数可能会更好。