const TypedeffedIntPointer不等于const int *

我有以下C ++代码:

typedef int* IntPtr;
const int* cip = new int;
const IntPtr ctip4 = cip;

我用Visual Studio 2008进行编译,并得到以下错误:

错误C2440:'初始化':不能从'const int *'转换为'const IntPtr'

显然,我对typedef的理解不是应该的。

我问的原因是,我在STL地图中存储了一个指针类型。 我有一个函数返回一个我想用来在地图中搜索的常量指针(使用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 * (不管它是否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
}

const IntPtrint* const相同,而不是const int*

也就是说,它是一个指向intconst指针,而不是指向const int的指针。

解决办法是提供两个typedef:

typedef int* IntPtr;
typedef const int* ConstIntPtr;

并且当你需要一个指向const int的指针时使用ConstIntPtr

链接地址: http://www.djcxy.com/p/56999.html

上一篇: const TypedeffedIntPointer not equal to const int *

下一篇: Template instantiation error