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

AGM*_*GML 2 c++

这是一个非常基本的问题; 对不起,如果它很常见,但我找不到具体的答案.

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

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

无论如何,你明白了.我再也不想接触'stride'所以它应该是const.处理这个问题的首选方法是什么?我是否使用临时值来计算值,然后将其分配给"const"对象?或者是更好的常量?或者我只是把它留给非const?

120*_*arm 6

使用初始化函数:

int ComputeStride() {
    int s = 1;
    for (auto e: extentsvector)
        s *= e;
    return s;
}
const int stride = ComputeStride();
Run Code Online (Sandbox Code Playgroud)

  • @Olaf:在C++语言类中,构造函数和析构函数保证将它们的对象视为*可修改*,无论这些对象是否为`const`(可能不包括`constexpr`).编译器如何用"只读内存"实现它是他们的问题.最有可能的是,他们永远不会将非平凡的对象放入只读内存中.你甚至在哪里得到这个想法? (4认同)