2015-09-25 205 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破解周围预先存在的愚蠢情形之一的,违背了类型系统的意愿,其实是好的。

相关问题