std::string sAttr("");
sAttr = sAttr+VAL_TAG_OPEN+sVal->c_str()+VAL_TAG_CLOSE;
否则我在代码中定义的地方
const char VAL_TAG_OPEN[] = "<value>";
sVal
是从字符串指针数组中检索的变量。这在大多数系统,Windows和Linux中都可以正常工作。但是,在一个客户站点上,据我认为在其中进行了一些广泛测试的linux版本,产生的结果好像我从未使用过VAL_TAG_OPEN
和VAL_TAG_CLOSE
一样。我收到的结果是sAttr = sAttr+sVal->c_str();
这是怎么回事 ?。 std::string串联在整个运行时是否有所不同?
最佳答案
为什么是->c_str()
?如果sVal
是std::string
,请尝试删除此调用。请记住,求值顺序是不确定的,因此您可能最终会添加指针而不是连接字符串,因为VAL_TAG_OPEN
,sVal->c_str()
和VAL_TAG_CLOSE
都是纯C字符串。我建议您使用加法赋值运算符+=
,例如:
sAttr += VAL_TAG_OPEN;
sAttr += *sVal; /* sVal->c_str() ? */
sAttr += VAL_TAG_CLOSE;
(无论如何应该更快)。