以下代码无法编译:
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);
那么定义main签名以调用这两个函数的最佳方法是什么?
答案 0 :(得分:3)
在C ++中,您可以通过const_cast
添加或删除const
- 例如:
char** s;
const char** t = const_cast<const char**>(s);
由于你正在处理argv,只要Init2
没有尝试改变任何东西就可以非常安全地向它们添加const,并且它不应该因为它的参数是{{1 }}
请注意,在删除cv限定符后,考虑修改const char**
变量的值会导致未定义的行为。