c – sizeof工作如何?我该怎么写我自己的?

我知道C并且知道自己的函数sizeof,但是我需要编写自己的sizeof函数,所以请说明它的工作原理?该参数有什么作用?

解决方法

你没有提供任何有意义的细节,你想做什么,所以很难弄清楚你需要什么.

你可以通过你自己的模板功能来“包装”sizeof

template <typename T> size_t my_sizeof() {
  return sizeof(T);
}

然后使用它作为

size_t s = my_sizeof<int>();

有时可以遇到一个请求来实现类似sizeof的功能,而不使用sizeof.像这样的请求没有任何实际意义,但有时被用作作业作业.人们可以做到如下

template <typename T> size_t my_sizeof() {
  T t;
  return (char *) (&t + 1) - (char *) &t;
}

这将需要一个认的可构建的T.一个较少的限制,但正式非法的解决方案(一个黑客)将是类似的

template <typename T> size_t my_sizeof() {
  return (char *) ((T *) NULL + 1) - (char *) (T *) NULL;
}

上述实现实现基于类型的sizeof.

试图模拟基于价值的sizeof的功能可能如下所示

template <typename T> size_t my_sizeof(const T& obj) { 
  return my_sizeof<T>();
}

但是,如果至少因为内置的sizeof不能评估其参数,那么这不会远远地等同于内置的sizeof.

最后,这些实现都不会产生积分常数表达式(ICE),如内置sizeof所示.在当前版本的语言中不可能实现ICE的制作.

无论如何,这一切当然完全没有实际价值.只要使用sizeof,当你想知道的大小.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...