我有一个或多或少的代码:
bar(const char**)
{
// stuff
}
foo(char** arr)
{
bar(arr);
}
编译器通知我我正在做invalid conversion from ‘char**’ to ‘const char**’
。虽然我知道这意味着什么,但我不明白为什么不允许这样做。完全可以通过需要char*
的{{1}}。
答案 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;
}