如何在 C++ 中将“string*”转换为“const string&”?

Posted

技术标签:

【中文标题】如何在 C++ 中将“string*”转换为“const string&”?【英文标题】:How do I convert something of "string*" to "const string&" in C++? 【发布时间】: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

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

【问题讨论】:

【参考方案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);
    

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

【讨论】:

以上是关于如何在 C++ 中将“string*”转换为“const string&”?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中将 uint8_t 的向量转换为 std::string?

如何在 C++ 中将 Int 转换为 String,反之亦然(不使用像 sstream 这样的库)

在 C++ 中将浮点数转换为 std::string

如何在 C++ 中将字符串转换为 char 数组?

在 C++ 中将字符串转换为 Cstring

如何在 C++ 中将十六进制字符串转换为字节字符串? [复制]