Почему следующий компилятор
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)
и не может быть увеличен, потому что не имеет смысла выполнять такую операцию.
Других решений пока нет …