【发布时间】:2021-08-01 16:44:05
【问题描述】:
我需要创建一个解析函数,所以我写了这个:
inline const char* parse(const int &arg)
{
return std::to_string(arg).c_str();
}
看起来很合理——至少对我来说是这样——但是当我尝试用 std::cout 而不是整数值来查看这个函数的值时,我得到了一些随机的 ascii 字符。
所以我尝试更改函数,结果是这样的:
inline const char* parse(const int &arg)
{
return (new std::string(std::to_string(arg)))->c_str();
}
它按预期工作,但我想知道的是为什么第一个功能案例不能正常工作。
另外,出现了一个次要问题(对于我来说可能是一个愚蠢的初学者) - 如果我动态创建 std::string,我应该使用 std::move 返回函数的值吗?
return std::move((new std::string(std::to_string(arg)))->c_str());
【问题讨论】:
-
返回
std::string而不是 (dangling)const char* -
您在函数中创建的字符串在函数结束时死亡,因此您返回的指针无效。
-
之后你可能需要一个
const char*,但函数应该返回std::string,你仍然可以从结果中使用c_str()方法。 -
为什么要回
const char*?更广泛的背景是什么? -
@czarson 然后按照@Jarod42 所说的做:返回一个字符串,然后使用
c_str。
标签: c++ c++11 move-semantics