C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – sizeof(T)值的标准类型特征大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
C 11标准指定了类型特征std :: alignment_of< T>.它只返回alignof(T)的值.

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)值的标准类型特征所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: