函数指针的vector:不同的模板形参
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)
,不能加1,因为执行这样的操作没有意义。
相关文章:
- 哪个模板形参在boost::shared_ptr构造函数中使用一个原始指针
- 如何在编译时通过模板形参默认值的名称/指针获取函数的类型
- c++中作为形参的指针
- 指向函数的指针vs作为模板非类型形参的函数
- 指向成员变量的引用/指针作为模板形参
- 用带有特定(double..)指针形参的void*函数重载函数
- 为什么模板非类型形参指针和引用实参需要是全局的
- c++形参是一个指向常量对象的指针,但不返回更新后的对象
- 函数指针的vector:不同的模板形参
- 重载在形参中接受指针的操作符
- 关于将指向数组的指针作为函数形参的混淆
- 为什么c++ 11 CAS操作使用两个指针形参
- 在c++中向指针形参传递值
- 将指向类成员的指针作为模板形参传递
- 具有指针引用模板形参的c++模板成员函数
- 在模板演绎中保持函数指针形参的完整类型
- 模板化形参的函数指针歧义
- 指向函数形参的指针vs函数形参
- 指向类成员作为模板形参的指针
- 函数指针的形参类型的模板实参演绎涉及未演绎的形参包