[英]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.