例如:
struct test
{};
void thing(test())
{}
int main()
{
thing(test());
}
这段代码会给我错误;但是,下一个示例不会给我错误:
void thing(int())
{}
int main()
{
thing(int());
}
我的主要问题是,为什么第一个示例不可行而第二个示例不可行?最终,双方test
并int
有类型,所以我想不出为什么声明的一个匿名对象test
在thing
函数参数列表是不可能的,而声明类型的匿名对象int
在thing
函数的参数列表。
这是可能的; 只是您做错了。
这是一个采用类型为unnamed的参数的函数的声明test
:
void thing(test);
这是一个函数的声明,该函数带有类型为pointer-to-function-returning-的未命名参数test
:
void thing(test());
您需要前者,而不是后者。
那你的第二个代码示例工程实际上是一个神奇古怪,从一个事实,即所产生int()
的0
是一个有效的空指针常量,它可用于初始化函数指针; 该示例在交换int()
其他整数后立即中断,或者如果您在完全兼容的C ++ 14编译器中运行代码(因为C ++ 14这样做是为了使它0
不是int()
有效的null指针常量)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句