从性能上讲,从string中的任意函数返回C++11可以吗?如果不推荐“直接返回”字符串,那么返回字符串的首选方法是什么?
C++中的字符串不进行引用计数,因为标准禁止这种做法。从我(可能不知情)的角度来看,这意味着一个字符串将由复制构造函数返回,从而产生一个可能较大的memcpy。是这样的吗?
将函数定义为string MyClass::makeString(...)而不是像void MyClass::makeString(string & ret, ...)这样的函数是非常简单和清晰的。另一方面,从性能的角度来看,后一种方法似乎更好。
发布于 2014-05-26 14:29:39
当您从将字符串声明为本地非静态变量的函数返回std::string时,编译器可以积极地优化代码,以便很少或根本不进行复制。当涉及到字符串时,您不应该担心这对性能的影响。
即使在您确信会有大量复制的情况下,在分析器指出特定代码是低效率的来源之前,也不应该担心效果。在我的经验中,这种情况很少发生:一般来说,在效率低于标准的算法上浪费的CPU时间比在样板问题上浪费的要多得多,例如复制一个或两个额外的字符串。
发布于 2014-05-26 14:23:01
如果你在使用C++11,是的,没关系。
https://stackoverflow.com/questions/23872272
复制相似问题