sizeof运算符是否有类似的特征?我只是错过了它,或者它只是在标准中错过了,还是有一些模糊的技术原因为什么没有指定?
显然创建这样的特性是微不足道的,但我无法想象在引入std :: alignment_of时不会考虑它.
对于上下文,我有一个自定义类型特征,用于在应用于类型列表时获取单个特征的最大值.
template <template<class> class Trait,typename F,typename... T>struct trait_max : std::integral_constant<decltype(Trait<F>::value),(Trait<F>::value > trait_max<Trait,T...>::value) ? Trait<F>::value : trait_max<Trait,T...>::value>{ };template <template<class> class Trait,typename F>struct trait_max<Trait,F> : std::integral_constant<decltype(Trait<F>::value),Trait<F>::value>{ };
当你需要知道一组类型的最大值时,这个特性非常方便:
auto max_align = traits_max<std::alignment_of,int,float,std::string>::value;auto max_size = traits_max<std::size_of,std::string>::value; // doesn't exist解决方法 std :: alignment_of在C 11中不是新的.它在2007年作为TR1的一部分被添加(以及< type_traits>的其余部分).TR1的< type_traits>是从 Boost TypeTraits批发复制的,只提供了alignment_of,因为2005年没有标准的方法来获得该值.
当然在2005年有一种方法可以获得T型的尺寸;它自古以来就被拼写为sizeof(T).这就是size_of< T>不是在Boost TypeTraits中,这就是为什么它在2007年没有被复制到TR1中,这就是为什么它没有被归入C 11.
截至2011年,还有一种标准的方式来获得T型的对齐;它拼写为alignof(T). 2011年之前的构造std :: alignment_of< T> ::值是不必要的冗长,除非您担心2011年之前的实现可移植性,否则您几乎肯定不应该再使用它了.
我相信编写示例代码最常用的方法是
size_t max_align = std::max({alignof(int),alignof(float),alignof(std::string)});size_t max_size = std::max({sizeof(int),sizeof(float),sizeof(std::string)});
一旦C 14滚动,std :: max将成为constexpr,因此这将在编译时计算并可用于模板元编程.但是C 11的std :: max的嗜好是一个完全独立的问题,与你的问题无关. 总结
以上是内存溢出为你收集整理的c – sizeof(T)值的标准类型特征全部内容,希望文章能够帮你解决c – sizeof(T)值的标准类型特征所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)