std :: vector of function指针:不同的模板参数

时间:2016-10-08 21:20:12

标签: c++ stl function-pointers

为什么以下编译

std::vector<int(*)(double)> func_ptrs;

但这不是

std::vector<int(double)> func_ptrs

我在第二种情况下得到了一条丑陋的STL错误消息,因此我不会把所有内容放在这里,但是在消息的最后我得到了这个

/usr/include/c++/4.8/bits/stl_construct.h:102:30: error: ISO C++ forbids incrementing a pointer of type ‘int (*)(double)’ [-fpermissive]
for (; __first != __last; ++__first)

这似乎意味着C ++将类型int(double)强制转换为int (*) (double)。我的印象是int(*)(double)int(double)无论如何都是等价的?或者我错了吗?

想要澄清一下。提前谢谢。

1 个答案:

答案 0 :(得分:6)

int(double)实际上是一个函数类型,而不是函数指针。它在许多情况下衰减到函数指针,但不是在这里。例如,您不能将sizeof与函数类型一起使用 - 这对vector的分配器至关重要。

至于你的具体错误:add_pointer_t<int(double)>vector的迭代器在内部或直接使用它或多或少是int(*)(double)并且不能递增,因为它没有执行此类操作的意义。