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
首先要限制隐式转换?
答案 0 :(得分:1)
align_val_t
是一个强类型的枚举,并且不允许将它们隐式转换为整数。
align_val_t
从一开始就是一种黑客,该类型仅存在是为了防止与常规其他参数混淆。