为什么`std :: align_val_t`应该限制隐式转换?

时间:2018-07-22 07:58:30

标签: c++ interface new-operator software-design memory-alignment

std::align_val_t限制隐式转换:

// won't compile
// std::align_val_t align = 64;

auto aln = std::align_val_t{64};

代码对齐后,应该在界面中保留这种隐式转换的限制吗?

是否允许将size_t参数隐式转换为align_val_t是一个好习惯?

例如:

[[no_discard]] T* make_copy_on_heap(const T (array&) [N], std::align_val_t aln )

[[no_discard]] T* make_copy_on_heap(const T (array&) [N], std::size_t aln )

如果我允许稍后的版本(size_t界面),为什么std::align_val_t首先要限制隐式转换?

1 个答案:

答案 0 :(得分:1)

align_val_t是一个强类型的枚举,并且不允许将它们隐式转换为整数。

align_val_t从一开始就是一种黑客,该类型仅存在是为了防止与常规其他参数混淆。