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

时间:2015-11-26 19:42:25

标签: c++

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

通常我发现自己处于一个对象固有的常量,但需要多行初始化的情况。例如,我想要一个步幅是向量中未知的编译时元素数的乘积:

    String Url = "";
    int i;

    String [] paper_url;
    paper_url = new String[2];
    paper_url[0] = new String("http://www.google.com");
    paper_url[1] = new String("http://www.yahoo.com");

    for (i=1;i<=2;i++) {
        Url = paper_url[i];
    }

无论如何,你明白了。我从来不想触摸&#39; stride&#39;再次,所以它应该是常量。什么是解决这个问题的首选方式?我是否使用临时值来计算值,然后将其分配给“常量”。宾语?或者是更好的常量?或者我只是把它留给非const?

2 个答案:

答案 0 :(得分:6)

使用初始化函数:

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

答案 1 :(得分:4)

在c ++ 11中执行此操作的常用方法是使用lambda函数初始化const变量:

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