相关疑难解决方法(0)

什么特质/概念可以保证memsetting一个对象是明确定义的?

假设我已经定义了一个zero_initialize()函数:

template<class T>
T zero_initialize()
{
    T result;
    std::memset(&result, 0, sizeof(result));
    return result;
}

// usage: auto data = zero_initialize<Data>();
Run Code Online (Sandbox Code Playgroud)

调用zero_initialize()某些类型会导致不确定的行为1,2.我目前正在执行T验证std::is_pod.由于这个特性在C++ 20中被弃用以及概念的出现,我很好奇zero_initialize()应该如何发展.

  1. 什么(最小)特征/概念可以保证memsetting一个对象是明确定义的?
  2. 我应该用std::uninitialized_fill而不是std::memset吗?为什么?
  3. 对于类型子集,此函数是否已被C++初始化语法之一淘汰?或者它将与即将到来的未来C++版本一起使用?

1) 删除班级的所有成员.
2) 在库类(std :: string)上使用memset时,"未定义的行为"是什么原因?[关闭]

c++ metaprogramming sfinae c++14 c++20

20
推荐指数
2
解决办法
959
查看次数

标签 统计

c++ ×1

c++14 ×1

c++20 ×1

metaprogramming ×1

sfinae ×1