【发布时间】:2011-07-16 23:23:33
【问题描述】:
我想用 C++ 编写一个宏,它将值 0 赋予表的每个元素。例如,在声明i 后:int i[10];,宏 fill_with_zeros(i) 将产生这种效果:
i[0] = 0;
i[1] = 0; 等等。
这是它的代码:
#define fill_with_zeros(xyz) \
for(int l = 0 ; l < sizeof(xyz) / sizeof(int) ; l++) \
xyz[l] = 0;
问题是我希望它可以处理多种类型的表:char、int、double 等。为此,我需要一个函数来确定xyz 的类型,而不是sizeof(int)我可以使用 sizeof(typeof(xyz)) 之类的东西。
存在类似的线程,但人们通常希望打印类型名称,而我需要在 sizeof() 中使用名称。有什么办法吗?
提前致谢
【问题讨论】:
-
只是一个问题。为什么不
int i[10] = { 0 };?甚至memset? -
@vpprof:虽然有些时候和地方适合使用宏,但这不是其中之一。特别是因为像
memset()这样的解决方案可以满足您的需求,但效果更好。除非确实需要,否则最好避免在 C++ 中使用宏。 -
没错,没有什么比 memset 更聪明(对表来说更快)了。此外,在处理堆分配表时,您仍然需要知道确切的大小,因为 sizeof 对您没有帮助。
标签: c++ types sizeof typeof typeid