处理需要多行初始化'const'对象
Dealing with 'const' objects requiring multiple lines to initialize
这是一个非常基本的问题;如果这很常见,我很抱歉,但我找不到具体的答案。
我经常发现自己处于这样一种情况:一个对象本质上是恒定的,但需要多行初始化。例如,我希望步幅是编译时未知向量中元素数量的乘积:
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;
}();
相关文章:
- 被解释为低级别const的const对象的地址
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- "this"指向的对象是否与 const 对象相同?
- 从 const 对象访问非 const 方法
- 将非 const 对象用于 const 参数
- 如何键入用于const对象的自定义io操纵器
- 哪个 const 与哪个引用将更改参数并创建一个 const 对象?
- 无法在返回中转换 const 对象
- 接受对 const 对象的引用但没有 r 值的函数
- 当我调用 main 中使用 const 对象的 const 函数时,不断出现错误
- 在 const 对象上调用非 const 函数
- 正确的方法通过巨大的const对象的向量
- 如何重载 const 对象的 [],以便值赋值不会导致编译错误
- 相互引用的 Const 对象
- 析构函数是否可以在 const 对象上调用非 const 函数
- decltype 不会推断 const 对象的 const 成员
- 防止const函数被调用非const对象
- constexpr引用非const对象