【问题标题】:How do I convert something of "string*" to "const string&" in C++?如何在 C++ 中将“string*”转换为“const string&”?
【发布时间】:2009-06-17 22:04:07
【问题描述】:

例如,如果我有以下情况:

void foo(string* s)
{
    bar(s); // this line fails to compile, invalid init. error
}

void bar(const string& cs)
{
    // stuff happens here
}

我需要进行哪些转换才能使调用栏成功?

【问题讨论】:

    标签: c++ pointers reference constants


    【解决方案1】:

    改成:

    bar(*s);
    

    【讨论】:

    • 我该怎么做?把 const string& 变成 string*?
    • @Petr:你冒着抛弃const-ness 的风险,但如果你知道自己在做什么,const_cast<string *>(&s)
    【解决方案2】:
    void foo(string* s)
    {
        bar(*s);
    }
    

    s 指向一个字符串,而bar 需要一个(引用一个)字符串,所以你需要给bar s 指向的内容。 “s 指向的内容”的拼写方式是 *s

    【讨论】:

      【解决方案3】:

      在将指针转换为引用时,确保您没有尝试转换 NULL 指针很重要。编译器必须允许您进行转换(因为通常它无法判断它是否是有效的引用)。

      void foo(string* s)
      {
          if(0 != s){
            bar(*s);
          }
      }
      

      * 运算符与 & 运算符相反。要将引用转换为指针,请使用 &(地址)。要将指针转换为引用,请使用 *(的内容)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-21
        • 2021-04-11
        • 2013-03-19
        • 1970-01-01
        相关资源
        最近更新 更多