通过初始化列表“:”部分的C ++常量字段的初始化

问题描述

在下面的代码中,如何声明vv为const:vector<vector<float>> const vv;?例如。是否有任何c ++ 0x版本可以让我在: ...之前的{}“初始化列表”部分中循环?

#include <vector>
using std::vector;

struct ST {
    vector<int> const x; // simple constructor,initializ. via ": x(x)"
    vector<vector<float>> vv; // requieres loop,can be done in ": ..."?
    ST(vector<int> x,std::initializer_list<vector<float>> lv) : x(x) {
        for (auto v : lv) {
            vv.push_back(v);
        }
    }
};

解决方法

std::vector的构造函数带有一个初始化列表,您不需要循环:

struct ST {
    vector<int> const x;
    vector<vector<float>> const vv;

    ST(vector<int> x,std::initializer_list<vector<float>> lv) :
        x(x),vv{lv} 
    {}
};

如果您的示例过于简单,并且确实需要循环,则可以使用static方法初始化初始化列表中的const成员:

struct ST {
    vector<int> const x;
    vector<vector<float>> const vv;

    ST(vector<int> x,vv{create_vector(lv)} 
    {}
    static vector<vector<float>> create_vector(std::initializer_list<float> lv);
};