使用模板功能返回数组的大小

问题描述 投票:0回答:1

我遇到了此代码段:

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是否不需要函数定义?

c++
1个回答
0
投票

不需要定义,因为实际上并未调用该函数。 sizeof()仅需要确定表达式的类型,然后计算大小,它实际上并不进行调用。就像您有:

int foo();
size_t size{sizeof(foo())};

请记住,sizeof()始终在编译时求值。

© www.soinside.com 2019 - 2024. All rights reserved.