2015-09-25 161 views
2

我知道const char * p意味着我們不能改變pp指向的值。
C++:爲什麼我們不能將char **轉換爲const char **

現在我正在寫一個函數,它將採用函數main的參數。意思是這個函數將需要char **。所以我寫這樣的函數:
void func(const char **);。 但是當我通過的main給它的參數,我得到一個錯誤:

error C2664: 'void func(const char **)' : cannot convert argument 1 from 'char **' to 'const char **' 

我只想初始化const指針與non-const指針。這應該是工作。如果我們做相反的事情,我們應該得到一些錯誤。但是現在我不知道爲什麼我會得到這個錯誤。

+0

您需要向我們展示生成錯誤的代碼! –

+0

您的標題似乎與問題主體不匹配。 –

回答

9

I just want to initialize a const pointer with a non-const pointer. This should be work.

這不是你想要做的,不是。

您正嘗試初始化指向const char的指針的非const指針,非const指針指向指向char的指針。這從來都不是隱含的。 爲什麼It's well documented elsewhere,因爲它對所有人都不完全直觀,簡而言之,如果允許將char**轉換爲const char**,則const-正確性將被違反。

這與將char**轉換爲char** const並不相同,這是您認爲您正在嘗試執行的操作。

不幸的是,main的論點還沒有const散佈他們。抱歉。幸運的是,你可以解決它與const_cast

void foo(const char** argv) {} 

int main(int argc, char** argv) 
{ 
    foo(const_cast<const char**>(argv)); 
} 

這是那些在使用const_cast破解周圍預先存在的愚蠢情形之一的,違背了類型系統的意願,其實是好的。

相關問題