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_OPENVAL_TAG_CLOSE一样。我收到的结果是
sAttr = sAttr+sVal->c_str();

这是怎么回事 ?。 std::string串联在整个运行时是否有所不同?

最佳答案

为什么是->c_str()?如果sValstd::string,请尝试删除此调用。请记住,求值顺序是不确定的,因此您可能最终会添加指针而不是连接字符串,因为VAL_TAG_OPENsVal->c_str()VAL_TAG_CLOSE都是纯C字符串。我建议您使用加法赋值运算符+=,例如:

sAttr += VAL_TAG_OPEN;
sAttr += *sVal; /* sVal->c_str() ? */
sAttr += VAL_TAG_CLOSE;

(无论如何应该更快)。

08-19 13:31