c++ - 在成员初始化列表中填充 std::array

标签 c++ c++11 stdarray effective-c++

以下代码有效,但我想避免警告:

warning: 'fitness::vect_' should be initialized in the member initialization list [-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_(不改变其类型)?

最佳答案

我相信你可以忽略这个警告。

如果您在构造函数中为数组放置一个空的初始化,它会起作用:

#include <array>

template<class T, unsigned N>
class fitness
{
public:
  explicit fitness(T v):
  vect_{}
  {
    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;
}

关于c++ - 在成员初始化列表中填充 std::array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21993780/

相关文章:

c++ - 相同模板参数的专门化

c++ - 禁止精度损失的整数转换

c++ - 遍历二叉搜索树

c++ - 智能指针和数组

类 POD 数据的 C++ 保证和名称,支持 memcpy

c++ - 如何根据设置的 View 调整模型?

c++ - 使用 "if"或 "switch"设置变量类型

c++ - 如何声明一个 std::array of structs initialized inline with different values

c++ - 在 g++ 上进行聚合初始化的 std::array 会生成大量代码

c++ - 如何初始化 std::array<std::atomic<bool>> — 没有复制或移动 ctors