我可以从引用传递的参数返回值中声明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();
其中,函数返回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
局部变量不是常量表达式,用处不大;唯一的目的是稍后检测意外修改,但如果您的函数过于复杂,以至于您无法一眼判断是否发生了这种情况,那么重构该函数可能会更好。
相关文章:
- 为什么函数声明中允许 const?
- 在内存不足之前,我可以声明多少个 const 变量?
- 如何在声明为 const 的方法中更改类成员
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 可以使用<size_t>static_const(),std::as_const()或static_cast<const size_t>()来声明数组吗?
- 为什么必须将 const 添加到 constexpr 中才能进行字符串文字声明?
- 声明与 const 变量和成员函数相同的标识符
- 为什么我不能声明一个 constexpr 本地,而一个 const 一个工作?
- 类中的const声明
- 在类声明中初始化 const 成员变量时在调试模式下出现异常
- 为什么我们在这个函数声明中使用 const 和 & ?
- 为什么重载运算符>在参数声明 const 时不起作用?
- 在C 中声明const Pointer是常见的
- 声明“const”“boost::range”的正确方法
- 在声明'const'函数中循环访问具有'const_iterator'的集合会导致错误
- 什么是最好的以及如何在 C++ 函数中声明 const
- 我可以从引用传递的参数返回值中声明const int吗
- 在函数中声明const而不是变量有什么好处吗?
- 是否在类外部重新声明const静态变量
- 声明const全局变量时需要静态的