【发布时间】:2018-10-04 11:52:12
【问题描述】:
在下面的课程中,speak() 返回 const char* 而不是 std::string 有什么好处或理由吗?
class Animal
{
protected:
std::string m_name;
Animal(std::string name)
: m_name(name)
{
}
public:
std::string getName() { return m_name; }
const char* speak() { return "???"; }
};
【问题讨论】:
-
当您返回指向字符串文字的指针时,它不会创建字符串的新副本。当您返回 std::string 时,它需要复制内存。
-
一如既往:视情况而定
-
@PeterT 谢谢你,这是一个很好的答案。
-
您需要
const char*,例如,在与用 C 编写的库交互时。一个示例是通过 MPI 库发送字符串。 -
@Galik 通过 ref 返回在许多情况下是不合适的,而且非常危险。就我个人而言,我建议 OP 通过复制返回一个 std::string 。编译器优化很多。