【问题标题】:Convert type "char**" to "const char**"将类型“char**”转换为“const char**”
【发布时间】:2016-04-03 02:27:04
【问题描述】:

以下代码无法编译:

  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 签名以调用这两个函数的最佳方法是什么?

【问题讨论】:

    标签: c++ casting main


    【解决方案1】:

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

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

    由于您正在处理 argv,因此只要 Init2 不尝试更改任何内容,就应该非常安全地向它们添加 const-ness,而且它不应该因为它的参数是 const char**

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

    【讨论】:

    • 这种转换的问题不在于 Init2 试图修改 const 字符(没有强制转换就无法做到),而是将const char* 设置为指向实际const char 的地址,然后,例如,Init1 试图修改该地址处的字符,据它所知,这样做应该是完全安全的,因为它的参数是char**。所以不,这不安全。这就是编译器抱怨的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 2012-01-16
    • 1970-01-01
    相关资源
    最近更新 更多