簡體   English   中英

返回間接類型對象會影響性能嗎?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM