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

时间:2015-09-25 09:31:35

标签: c++ pointers const

我知道const char * p表示我们无法更改pp指向的值。

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

error C2664: 'void func(const char **)' : cannot convert argument 1 from 'char **' to 'const char **'

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

1 个答案:

答案 0 :(得分:10)

  

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

这不是你想要做的事,不。

您尝试初始化指向const指针的非const char指针,指针指向const的非char指针。这绝不会隐式执行。 为什么的? It's well documented elsewhere因为它并非完全直观,但简而言之,如果允许将char**转换为const char**,则会const - 违反正确性。

与将char**转换为char** const不同,这是您认为自己正在尝试做的事情。

令人遗憾的是,main的论点尚未散布const。抱歉。幸运的是,您可以使用const_cast

解决此问题
void foo(const char** argv) {}

int main(int argc, char** argv)
{
   foo(const_cast<const char**>(argv));
}

这是使用const_cast来破解预先存在的愚蠢的情况之一,与类型系统的愿望相反,实际上是可以的。