这是一个非常基本的问题;抱歉,如果它很常见,但我无法找到具体的答案。
通常我发现自己处于一个对象固有的常量,但需要多行初始化的情况。例如,我想要一个步幅是向量中未知的编译时元素数的乘积:
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?
答案 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;
}();