std :: string'+':无法添加两个指针

时间:2015-09-17 10:44:29

标签: c++ visual-c++ stdstring

为什么要分配

std::string s="aaa"+1

正常工作

std::string s="aaa"+1+"bbb" 

收到错误Error 14 error C2110: '+' : cannot add two pointers

4 个答案:

答案 0 :(得分:5)

没有+运算符来连接C字符串。 C字符串只是指针(const char *),所以如果你给它添加一个数字,它只会增加指针。然后将其转换为C ++字符串:

std::string s = "aaa" + 1

                |=======|
                  "aa"
               const char *

           |==============|
                 "aa"
             std::string

然后在第二步中失败,当你尝试连接第二个字符串时,因为虽然向指针添加一个常量仍然有意义(即使不是你的情况),但你无法理解添加两个指针。

"aaa" + 1 + "bbb" 

|========|
   "aa"
const char *

            |===|
         const char *

为了确保你实际连接而不是求和,我建议使用stringstream。这也可以确保您的常数被正确转换为string

std::stringstream ss;
ss << "aaa" << 1 << "bbb";
std::string s = ss.str();

这适用于operator<<重载的每种类型。

答案 1 :(得分:3)

std::string s="aaa"+1;

这只是编译,但很可能不会做你想要的:它向const char*文字"aaa"衰减加1,然后从该指针构造std::string,结果在s == "aa"

当使用operator+连接字符串时,至少有一个操作数必须具有类型std::string,另一个操作数可以是const char*或可以转换为该类型的操作数。例如:

std::string s="aaa"+std::to_string(1);

std::string s="aaa"+std::to_string(1)+"bbb";

答案 2 :(得分:0)

第一个可行,因为"abc" + 1实际上是字符串"bc"(更改实际字符串以便于查看)。这很简单,例如。

char array[] = "abc;
std::string str = &array[1];

第二个不起作用,因为你不能以这种方式附加两个字符串文字。您需要确保其中一个已经是std::string对象。

如果您想创建字符串"aaa1",我建议您查看函数std::to_string

答案 3 :(得分:0)

在此情况下,这是附加信息。 通常,穷人的解决方案是使其失效一半:

void JTube::checkNode(ITCXMLNode current_node, char * tagName){

if(!current_node.d)  {
      string s = "XML tag missing:";
      s = s +  tagName;
      exitreason(s);   
     }
   }