在C++中,星号前的
const
修饰符意味着使用此指针时,所指向的值不能被更改,但指针本身可以指向其他内容。以下是示例:void justloadme(const int **ptr)
{
*ptr = new int[5];
}
int main()
{
int *ptr = NULL;
justloadme(&ptr);
}
justloadme
函数不应该编辑传递的参数所指向的整数值(如果有的话),但可以编辑int*
类型的值(因为第一个星号之后没有const
修饰符)。但为什么我在GCC和VC++中都会得到编译器错误?
GCC:错误:从int**
转换为const int**
无效
VC++:错误 C2664:'justloadme'
:无法将参数1从'int **'
转换为'const int **'
。转换会导致限定符丢失
为什么会说转换会导致限定符丢失?难道不是增加了const
限定符吗?此外,这难道不类似于strlen(const char*)
,我们向其传递一个非const
的char*
吗?