【发布时间】:2021-02-10 05:03:02
【问题描述】:
我觉得我错过了什么。我看不到任何关于我应该如何指定我的班级具有特征的信息。 例如
#include <type_traits>
class foo
{
type_trait trivially_copyable = true; //?
type_trait integral = false; //?
public:
foo(const int& val);
int get_x() const;
private:
int m_x;
};
这在以下情况下很有用:
- int32_t 的包装器,用作 Unicode 字符,使用 int 进行复制优化,但没有积分特征,因此标准函数不会对其进行数学运算。
- 具有 size_t 索引的对象指向存储组件的已知数组,并且在复制原始对象时也必须复制该数组对象。因此,尽管该类由所有可平凡复制的基元组成,但它不会是可平凡复制的。
- 具有唯一 ID 的对象,即使在复制时也必须更新,使其不可轻易复制。
- 一种复杂的容器类型,它在数据之前存储控制块,使其易于复制,但也可以选择非平凡复制以清理碎片内存。
请有人解释一下如何在我自己的类中指定类型特征,那太好了。
作为第 2 和第 4 的后续,如果我实现了一个非平凡的复制构造函数,编译器会自动将该函数标记为不可平凡复制(反之亦然),还是我每次都需要手动标记它?
提前致谢。
【问题讨论】:
标签: c++ typetraits