为什么不能将char **隐式转换为const char **

时间:2013-03-29 13:08:25

标签: c++ casting char

我有一个或多或少的代码:

bar(const char**)
{
// stuff
}

foo(char** arr)
{
  bar(arr);
}

编译器通知我我正在做invalid conversion from ‘char**’ to ‘const char**’。虽然我知道这意味着什么,但我不明白为什么不允许这样做。完全可以通过需要char*的{​​{1}}。

2 个答案:

答案 0 :(得分:1)

因为如果它被允许,那么你可能会无意中更改声明为const的内容。

这是一个具体的滥用示例,如果规则允许这样做:

char const* s = "a literal, very const";

bar(const char** pp )
{
    *pp = s;
}

foo(char** arr)
{
  bar(arr);
  char* unconsted_s = *arr;
  unconsted_s[0] = 'X';
}

这也是FAQ。在询问之前检查常见问题(或谷歌)通常是一个好主意。

答案 1 :(得分:0)

如果允许,可能导致类似的情况。

void foo(int** arr)
{
    /*Can freely modify value at location pointed by a*/
   **arr = 6;
}


int main()
{
 /*Pointer to constant*/
 int i = 5;

 const int* a =&a;

 /*Not a pointer to constant*/
 int** aa= &a;

 foo(aa);

return 0;
}