c – const TypedeffedIntPointer不等于const int *
发布时间:2020-12-16 10:16:50 所属栏目:百科 来源:网络整理
导读:我有以下C代码: typedef int* IntPtr;const int* cip = new int;const IntPtr ctip4 = cip; 我用Visual Studio 2008编译它并得到以下错误: error C2440: ‘initializing’ : cannot convert from ‘const int *’ to ‘const IntPtr’ 显然,我对typedef的
我有以下C代码:
typedef int* IntPtr; const int* cip = new int; const IntPtr ctip4 = cip; 我用Visual Studio 2008编译它并得到以下错误:
显然,我对typedef的理解不是应该的. 我问的原因是,我将指针类型存储在STL映射中.我有一个函数返回一个const指针,我想用它在地图中搜索(使用map :: find(const key_type&)). const MyType* 和 const map<MyType*,somedata>::key_type 是不相容的,我有问题. 问候 解决方法
当你编写const IntPtr ctip4时,你声明一个const-pointer-to-int,而const int * cip声明一个指向const-int的指针.这些不一样,因此转换是不可能的.
您需要将cip的声明/初始化更改为 int * const cip = new int; 要在您的示例中解决此问题,您需要将映射的键类型更改为const MyType *(是否有意义取决于您的应用程序,但我认为通过用作键的指针更改MyType对象地图不太可能),或者回到const_casting参数来查找: #include <map> int main() { const int * cpi = some_func(); std::map<const int *,int> const_int_ptr_map; const_int_ptr_map.find(cpi); //ok std::map<int *,int> int_ptr_map; int_ptr_map.find(const_cast<int *>(cpi)); //ok } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |