处理需要多行初始化'const'对象

Dealing with 'const' objects requiring multiple lines to initialize

本文关键字:const 对象 初始化 处理      更新时间:2023-10-16

这是一个非常基本的问题;如果这很常见,我很抱歉,但我找不到具体的答案。

我经常发现自己处于这样一种情况:一个对象本质上是恒定的,但需要多行初始化。例如,我希望步幅是编译时未知向量中元素数量的乘积:

const std::vector<int> extentsVector; //pretend this is initialized
int stride = 1;
for (int i=0; i<k; ++i){
    stride *= extentsVector[i];
}

不管怎样,你明白了。我再也不想碰"大步"了,所以它应该是const。处理这个问题的首选方法是什么?我是否使用临时值来计算值,然后将其分配给"const"对象?还是constcast更好?还是让它变得毫无疑问?

使用初始化器函数:

int ComputeStride() {
    int s = 1;
    for (auto e: extentsvector)
        s *= e;
    return s;
}
const int stride = ComputeStride();

在c++11中实现这一点的常用方法是使用lambda函数初始化常量变量:

const std::vector<int> extentsVector;
const int stride = [&extentsVector] () -> int
{
    int stride = 1;
    for (int i = 0; i < k; ++i)
    {
        stride *= extentsVector[i];
    }
    return stride;
}();