[英]Does returning a indirect typed object affect performance?
我有一个内联函数
string myFunction() { return ""; }
和....相比
string myFunction() { return string(); }
它有性能牺牲吗?
使用std :: string和QString 在VC2012版本上测试它 (虽然在QString上,两者返回不同的结果:感谢DaoWen)。 两者都显示第二个版本比第一个版本快3倍。 感谢您的所有答案和评论。 测试代码附在下面
#include <iostream>
#include <string>
#include <ctime>
using namespace std;
inline string fa() { return ""; }
inline string fb() { return string(); }
int main()
{
int N = 500000000;
{
clock_t begin = clock();
for (int i = 0; i < N; ++i)
fa();
clock_t end = clock();
double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
cout << "fa: " << elapsed_secs << "s \n";
}
{
clock_t begin = clock();
for (int i = 0; i < N; ++i)
fb();
clock_t end = clock();
double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
cout << "fb: " << elapsed_secs << "s \n";
}
return 0;
}
它们将导致不同的std :: string构造函数。
std :: string() - 将创建一个空对象。
“”将使用std :: string(char *)构造
后者将在内部执行第一个不需要的strlen + strcpy,因此差异非常小。
在您发布的示例中, return "";
将自动翻译为return string("");
在编译时 。 除非string("")
明显慢于string()
,否则应该没有多大区别。
在你的评论中,你提到你实际上使用的是QString
,而不是std::string
。 请注意, QString()
构造一个空字符串 ( isNull()
和isEmpty()
都返回true),而QString("")
构造一个空字符串 ( isEmpty()
返回true但isNull()
返回false)。 他们不是一回事! 您可以将QString()
char * str = NULL;
和QString("")
像char * str = "";
。
使用return string();
因为那将使用默认构造函数。 一个好的标准库实现可能甚至不会在那时初始化字符串缓冲区。
const char*
的构造const char*
必须采用字符串副本。 所以我觉得return "";
会比较慢。
但是,要确定,要比赛你的马匹 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.