以下代码片段(正确)在 C 中给出警告,在 C++ 中给出错误(分别使用 gcc 和 g++,使用版本 3.4.5 和 4.2.1 进行测试;MSVC 似乎并不关心):
char **a;
const char** b = a;
我可以理解并接受这一点。
此问题的 C++ 解决方案是将 b 更改为 const char * const *,这不允许重新分配指针并防止您规避 const-correctness ( C++ FAQ )。
char **a;
const char* const* b = a;
但是,在纯 C 中,更正后的版本(使用 const char * const *)仍然会发出警告,我不明白为什么。有没有办法在不使用演员表的情况下解决这个问题?
澄清:
1)为什么这会在C中产生警告?它应该是完全 const 安全的,而且 C++ 编译器似乎也能认出它。
2)在说(并让编译器强制执行)我不会修改它指向的字符的同时,接受这个 char** 作为参数的正确方法是什么?例如,如果我想写一个函数:
void f(const char* const* in) {
// Only reads the data from in, does not write to it
}
我想在 char** 上调用它,参数的正确类型是什么?