下面的代碼段(正確地)給出在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