繁体   English   中英

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

[英]std::vector of function pointers: different template parameters

为什么以下编译

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)无论如何都是等价的? 还是我错了?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM