我遇到了此代码段:
template <typename T, size_t N>
char (&ArraySizeHelper(T (&array)[N]))[N];
#define arraysize(array) (sizeof(ArraySizeHelper(array)))
[我也看到了其他一些文章对此进行了解释,但是我还没有清除一件事;
char (&ArraySizeHelper(T (&array)[N]))[N];
是一个声明,定义在哪里?它如何返回值?
如果我像普通函数一样尝试使用ArraySizeHelper
,则会收到未定义的链接器错误。 sizeof
是否不需要函数定义?
不需要定义,因为实际上并未调用该函数。 sizeof()仅需要确定表达式的类型,然后计算大小,它实际上并不进行调用。就像您有:
int foo();
size_t size{sizeof(foo())};
请记住,sizeof()始终在编译时求值。