【发布时间】:2015-11-19 05:19:42
【问题描述】:
示例代码:
class Thingy
{
public:
void doStuff(std::string&);
std::string doStuff();
};
void Thingy::doStuff(std::string& str) {
str = "stuff";
}
std::string Thingy::doStuff() {
return "stuff";
}
int main(int argc, const char* args[])
{
std::string name;
Thingy thingy;
thingy.doStuff(name);
std::cout << name << " " << thingy.doStuff() << std::endl;
}
特别是对于字符串,这两种方法是否更有效,这种效率是否“值得”扭曲代码的可读性或一致性? (例如,如果不需要,我宁愿不创建 name 变量)
这是(归根结底)与本次讨论相关的字符串常量这一事实吗?
【问题讨论】:
-
基本上答案和returning a
std::vector一样。 -
我更喜欢返回
std::string,因为它更具可读性。您的编译器很可能会执行 RVO(返回值优化),即使不执行,也会使用其移动构造函数构造字符串。它不会显着降低效率。 -
这是 [...] 与本次讨论相关的字符串常量。只要返回类型是
std::string而不是const std::string &,区别就无关紧要了,因为最后你需要从一个常量char数组构造一个可变字符串。 -
@πάνταῥεῖ 这回答了我关于“字符串是否特殊”的问题。但我确实看到了将字符串作为返回类型和向量作为输出参数传递的趋势(可能是因为字符串更可能很短)