【问题标题】:Concatenating strings doesn't work as expected [closed]连接字符串不能按预期工作[关闭]
【发布时间】:2011-05-17 07:43:04
【问题描述】:

我知道这是一个常见问题,但在寻找参考资料和其他材料时,我找不到这个问题的明确答案。

考虑以下代码:

#include <string>

// ...
// in a method
std::string a = "Hello ";
std::string b = "World";
std::string c = a + b;

编译器告诉我它找不到char[dim] 的重载运算符。

是不是表示字符串中没有+运算符?

但在几个例子中,有这样一种情况。如果这不是连接更多字符串的正确方法,那么最好的方法是什么?

【问题讨论】:

  • 您的代码应该编译得很好,这意味着您没有显示导致错误的确切代码(除了没有发布确切的错误消息之外)。
  • 好吧,它不起作用...可能我的错是我没有提供编译器...它是 g++ 而不是 vc... :)

标签: c++ operator-keyword string-concatenation stdstring standard-library


【解决方案1】:
std::string a = "Hello ";
a += "World";

【讨论】:

  • 如果我还有投票,我会 +1!
  • 对不起,它的 C++ 不是 C# i += 在这里不起作用,它的用途是
  • @Pratik You sure?
【解决方案2】:

我会这样做:

std::string a("Hello ");
std::string b("World");
std::string c = a + b;

在 VS2008 中编译。

【讨论】:

  • 应该也可以在 gcc 中使用。
【解决方案3】:
std::string a = "Hello ";
std::string b = "World ";
std::string c = a;
c.append(b);

【讨论】:

    【解决方案4】:

    您编写的代码可以正常工作。您可能正在尝试实现一些不相关但相似的目标:

    std::string c = "hello" + "world";
    

    这行不通,因为对于 C++,这似乎是在尝试添加两个 char 指针。相反,您需要将至少一个char* 文字转换为std::string。您可以执行您已在问题中发布的内容(正如我所说,此代码有效),或者您执行以下操作:

    std::string c = std::string("hello") + "world";
    

    【讨论】:

    • char* 是一个指针,不能简单地添加,因为它需要分配内存。 std::strings 隐藏分配,这就是为什么可以为它们提供 operator+ 的原因。
    • @Andry:这不起作用的原因是 C++ 从 C 继承了它的字符串文字,这就是为什么它们的类型是 const char[],而不是 std::string。在 C 中(因此也在 C++ 中)数组很容易衰减为指针,这就是为什么 "a"+"b" 将调用添加两个指针的内置运算符。结果(指向内存某处的指针)当然毫无用处,但这是我们坚持的。
    • @Andry:合理但错误。分配与此无关。 @sbi 给出的解释是正确的(除了一个指针相加的结果不是另一个指针这一事实——根本不可能相加两个指针,因为结果将毫无意义)。
    • 此外,直接相邻的字符串文字由编译器自动连接。例如,std::string c = "Hello" "world"; 将导致 c == "Helloworld"
    • 您也可以使用字符串文字:std;:string c = "hello"s + "world"s; 或将其中之一设为std::string
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 2012-06-17
    • 2022-01-23
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多