Kon*_*app 5 c++ stl function-pointers
为什么以下编译
std::vector<int(*)(double)> func_ptrs;
Run Code Online (Sandbox Code Playgroud)
但事实并非如此
std::vector<int(double)> func_ptrs
Run Code Online (Sandbox Code Playgroud)
?
在第二种情况下,我得到了一个丑陋的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)
Run Code Online (Sandbox Code Playgroud)
这似乎意味着C++将类型转换int(double)为int (*) (double).我的印象是int(*)(double),int(double)无论如何都是等同的?还是我错了?
想要澄清一下.提前致谢.
int(double)实际上是一个函数类型,而不是函数指针.它在许多情况下衰减到函数指针,但不是在这里.例如,您不能使用sizeof函数类型 - 这对于vector分配器至关重要.
至于你的特定错误:( add_pointer_t<int(double)>或多或少这是由vector迭代器在内部或直接使用)是int(*)(double)并且不能递增,因为执行这样的操作没有任何意义.
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |