gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:23:22 25 4
gpt4 key购买 nike

为什么下面会编译

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com