c++ - std::vector of function pointers:不同的模板参数

标签 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) 是等价的吗?还是我错了?

想澄清一下。提前致谢。

最佳答案

int(double)实际上是函数类型,不是函数指针。在许多情况下它会退化为函数指针,但这里不会。你不能使用 sizeof例如,使用函数类型 - 这对于 vector 至关重要的分配器。

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

关于c++ - std::vector of function pointers:不同的模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39937506/

相关文章:

c++ - 使用 Netbeans 启动并运行 Qt

C++ 字符串流内联

c++ 异常:抛出 std::string

c++ - 为什么函数指针定义可以使用任意数量的与号 '&' 或星号 '*' ?

c++ - 是否可以在概念中指定模板类?

c++ - 使用子类中的类型定义扩展模板类

c++ - 尝试使用可变参数模板模仿 python 打印函数不起作用

c++ - 迭代 std::set/std::map 的时间复杂度是多少?

c - 指向函数宏的函数指针

rust - 我如何从 Rust 调用原始地址?