在阅读cppreference.com中有关SFINAE的内容时,我遇到了这个我无法掌握的片段:
template <int I> void div(char(*)[I % 2 == 0] = 0)
所以,到底什么是
呢?
char(*)[I % 2 == 0] = 0
这看起来像是一个返回字符的函数指针,但方括号中的bool是什么意思?这是一个真实的东西还是只是一些愚蠢的人工示例?
template <int I> void div(char(*)[I % 2 == 0] = 0)
void div(char (*x)[I % 2 == 0] = 0)
x
是一个指向大小为1
(表示为真)或0
(表示为假)的数组的指针,默认为nullptr
。
但在C++中,参数名称是可选的,因此如果函数不使用x
,它可以省略名称。
int (*)[]
,而这是一个指向函数的指针:int(*)()
? - mariachi423int *[]
是一个指针数组,而 int *()
是一个返回指针的函数。 - melpomenechar(*)[I % 2 == 0] = 0
是指向 char 数组的指针,当 I 为偶数时,数组大小为 1,当 I 为奇数时,数组大小为 0,并且该指针被默认设置为 0。
因为无法创建大小为 0 的数组,所以此重载仅在 I 为偶数时才能调用。
// 当 I 为偶数时选择此重载
。 - UnholySheep