C++:为什么我们不能将char **转换为const char **
问题描述:
我知道const char * p
意味着我们不能改变p
到p
指向的值。
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
指针。这应该是工作。如果我们做相反的事情,我们应该得到一些错误。但是现在我不知道为什么我会得到这个错误。
答
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
破解周围预先存在的愚蠢情形之一的,违背了类型系统的意愿,其实是好的。
您需要向我们展示生成错误的代码! –
您的标题似乎与问题主体不匹配。 –