下面的代码段(正确地)给出在C语言的警告和错误在C++(使用gcc &克++分别与3.4.5和4.2.1版本测试; MSVC似乎并不关心):为什么我不能在C中将'char **'转换为'const char * const *'?
char **a;
const char** b = a;
我可以理解并接受这一点。
此问题的C++解决方案是将b更改为const char * const *,它禁止重新分配指针并阻止您规避const正确性(C++ FAQ)。
char **a;
const char* const* b = a;
然而,在纯C,修正版本(中使用const char * const的*)还给出了一个警告,我不明白为什么。 有没有办法避免这种情况而不使用强制转换?
澄清:
1)为什么这会在C中产生警告?它应该完全是常量安全的,而C++编译器似乎也是这样认识的。
2)接受这个char **作为参数的正确方法是什么,同时说(并让编译器强制执行)我不会修改它指向的字符? 例如,如果我想编写一个函数:
void f(const char* const* in) {
// Only reads the data from in, does not write to it
}
,我想调用它在一个char **,什么是正确的类型参数?
编辑: 非常感谢那些已经回复的人,特别是那些回答问题和/或跟进我的回复的人。
我已经接受了答案,即我不想在没有演员的情况下做我想做的事,不管它是否应该是可能的。
我对你的问题感到困惑,是这样的:“我如何让C不警告我?”还是“我如何让C++不会抛出编译错误?”或者,也许它们都不是这些。 – user7116 2008-09-16 22:55:12
我同意sixlettervariables,这个问题需要进一步澄清。 – 2008-09-16 23:00:18
问题是“为什么我不能将'char **'转换为'char * const *?' – Kevin 2008-09-16 23:05:53