11

次のコードは機能しますが、警告を回避したいと思います。

警告: 'fitness::vect_' はメンバー初期化リストで初期化する必要があります [-Weffc++]

g++ -Weffc++スイッチを指定してコンパイルすると、次のようになります。

#include <array>

template<class T, unsigned N>
class fitness
{
public:
  explicit fitness(T v)
  {
    static_assert(N, "fitness zero length");

    vect_.fill(v);
  }

private:
  std::array<T, N> vect_;
};

int main()
{
  fitness<double, 4> f(-1000.0);

  return 0;
}

警告を無視する必要がありますか? vect_コンストラクターの初期化リストを (型を変更せずに)埋める方法はありますか?

4

5 に答える 5

1

C++ 11の非静的データメンバー初期化子を使用した、よりクリーンなIMHOの別の方法を次に示します。

#include <array>

template<class T, unsigned N>
class fitness
{
public:
  explicit fitness(T v)
  {
    static_assert(N, "fitness zero length");

    vect_.fill(v);
  }

private:
  std::array<T, N> vect_ { };
};

int main()
{
  fitness<double, 4> f(-1000.0);

  return 0;
}
于 2014-02-24T21:19:57.160 に答える