c ++:为什么我们不能将char**转换为const char**

Yve*_*ves 3 c++ pointers const

我知道这const char * p意味着我们无法改变p通过指出的值p.

现在我正在编写一个函数,它将获取函数的参数main.意味着这个功能需要一个char **.所以我写这个函数是这样的:
void func(const char **);.但是当我将参数传递main给它时,我收到一个错误:

error C2664: 'void func(const char **)' : cannot convert argument 1 from 'char **' to 'const char **'
Run Code Online (Sandbox Code Playgroud)

我只想用const指针初始化一个non-const指针.这应该是有效的.如果我们做相反的事情,我们应该得到一些错误.但现在我不知道为什么会出现这个错误.

Lig*_*ica 10

我只想用非const指针初始化一个const指针.这应该是有效的.

这不是你想要做的,不.

您正尝试使用const指向指针的非指针初始化指向指针const char的非const指针char.这绝不会隐式执行.为什么它也记录在其他地方,因为这不是一个完全直观的一切,但,总之,如果转换char**const char**被允许,那么const-correctness会受到侵犯.

这是不一样的转换char**char** const,这是你认为你正在试图做的.

不幸的是,main他们的争论还没有const散布.抱歉.幸运的是,你可以通过以下方式解决它const_cast:

void foo(const char** argv) {}

int main(int argc, char** argv)
{
   foo(const_cast<const char**>(argv));
}
Run Code Online (Sandbox Code Playgroud)

这是其中一种情况,其中使用const_cast与现有的愚蠢相比,与类型系统的愿望相反,实际上是可以的.