示例代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
特别是对于字符串,要么是方法更有效,那么效率"值得"来扭曲代码的可读性或一致性?(例如,如果我不需要,我宁愿不创建名称变量)
事实上,这是(在一天结束时)与此讨论相关的字符串常量吗?
std::string不再允许在a上写入语义的复制,因此,表面上看,您可能认为按值返回字符串由于采用了深层复制而在计算上很昂贵.
但是,在C++ 03中,一个好的编译器会忽略深层复制.在C++ 11中,将调用移动构造函数.不会超额复制.
就个人而言,我不喜欢将非const引用传递给函数的模式,因为对调用者来说,修改参数并不是很明显.您也无法将匿名临时文件传递给此类函数(当然在这种情况下您不想这样做).编写函数以返回字符串可以为所有专业人员提供缺点.
| 归档时间: |
|
| 查看次数: |
1378 次 |
| 最近记录: |