c++ - 非 POD 数组上的 std::fill_n 是否可以首次初始化?

标签 c++ fill initialization

是否可以使用std::fill来初始化非POD类型的数组?

文档说 std::fill 使用 operator= 来初始化数组而不是放置复制构造。然而,据我所知,当在未初始化的空间上调用赋值运算符时,它实际上没有机会释放任何当前内存。

示例:

struct NonPod
{
    std::string myStr;
};

NonPod arr[10];
NonPod prototype;
NonPod * ptr = &arr[0];
std::fill_n(ptr, 10, prototype);

最佳答案

您正在寻找std::uninitialized_fill_n来自 memory header ,而不是来自 algorithm header 的 std::fill_n

但是要小心!您的代码没有考虑对齐或填充 - 请考虑使用 std::alignment_of,或者在不可用的平台上使用合适的 boost 替换。

关于c++ - 非 POD 数组上的 std::fill_n 是否可以首次初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5490756/

相关文章:

c++ - 平方和矩阵

c++ - 按值传递还是 const 引用?

java - Paint 方法 java - 带轮廓的矩形

c++ - 为什么 ISO C++ 标准禁止对成员进行初始化?

c++ - 如何使派生构造函数将串联值传递给其父构造函数?

c++ - std::vector 大小在保留和填充后不会更新

html - 如何用颜色填充 100% 的网页

c++ - ArrayList 的大小未知帮助

Swift 可失败初始化器调用 ExpressibleByStringLiteral 初始化器

c++ - 存储在结构中的元素是否彼此相邻