C++ 初始化列表初始化列表性能問題的簡單的探索

C++ 初始化列表性能問題的簡單的探索


從概念上來說,構造函數的執行能夠分紅兩個階段,初始化階段和計算階段,初始化階段先於計算階段ios

在執行構造函數時,若是沒有給定初始值,那系統就會自動進行初始化。函數

#include <stdlib.h> #include <iostream> #include <string>

class myclass { public: int num_i; float num_f; double num_d; char chr; std::string str; }; int main() { myclass test; std::cout << test.chr << std::endl; std::cout << test.str << std::endl; std::cout << test.num_i << std::endl; std::cout << test.num_f << std::endl; std::cout << test.num_d << std::endl; system("pause"); }


初始化列表是在初始化階段對成員變量進行復制,所以使用初始化列表比構造函數更加快速。性能

能夠經過比較使用初始化列表和不適用初始化列表的構造函數的執行時間來進行測試。測試

 

不使用初始化列表:spa

#include <stdlib.h> #include <iostream> #include <string> #include <time.h> #include <Windows.h>

class myclass { public: myclass(std::string *str) { mystr = new std::string[1000]; mystr = str; } private: std::string *mystr; }; int main() { time_t start,end; std::string *str = new std::string[1000]; for (int i = 0; i < 1000; i++) str[i] = "hello"; start = clock(); myclass n_class(str); end = clock(); std::cout << "函數執行時間:" <<(end - start)*1000/CLOCKS_PER_SEC;//精確到毫秒
    std::cout << "\n"; system("pause"); }

使用初始化列表:code

#include <stdlib.h> #include <iostream> #include <string> #include <time.h> #include <Windows.h>

class myclass { public: myclass(std::string *str) :mystr(new std::string[1000]) { mystr = str; } private: std::string *mystr; }; int main() { time_t start,end; std::string *str = new std::string[1000]; for (int i = 0; i < 1000; i++) str[i] = "hello"; start = clock(); myclass n_class(str); end = clock(); std::cout << "函數執行時間:" <<(end - start)*1000/CLOCKS_PER_SEC;//精確到毫秒
    std::cout << "\n"; system("pause"); }

由執行的結果能夠看出,在使用初始化列表函數執行的更加快速。blog

相關文章
相關標籤/搜索