转换型“的char **”,以“为const char **”

问题描述:

下面的代码无法编译:转换型“的char **”,以“为const char **”

char** s; 
    const char** s2 = s; 

我知道以下可以工作,但我认为应该有一些做的更好合法的途径它?

long long x = reinterpret_cast<long long>(s); 
    s2 = reinterpret_cast<const char**>(x); 

这个问题的背景是,我要使用具有 功能处理两个库的argc与不同的签名/ ARGV:

void Init1(int argc, char** argv); 
void Init2(int argc, const char** argv); 

那么什么是定义我的主签名的最佳途径调用这两个函数?

在C++中,你可以添加或删除const -ness通过const_cast,如:

char** s; 
const char** t = const_cast<const char**>(s); 

既然你正在处理的argv它应该是相当安全的常量性,只要加入到他们的Init2没有按不要试图改变任何东西,因为它的论点是const char**

请注意,在删除cv限定符后,如果要修改变量const的值,会导致未定义的行为。

+0

这个转换的问题不会与'Init2'试图修改const字符(它不能在没有强制转换的情况下进行),而是通过设置const char *来指向一个地址实际的'const char',然后,例如,'Init1'试图修改那个地址上的字符,只要它知道它应该是完全安全的,因为它的参数是'char **'。所以不,这是不安全的。这就是编译器抱怨的原因。 –