因上述函數(shù)全都是inline的,所以多層的函數(shù)調(diào)用并不會(huì)對(duì)性能造成影響,最終編譯 的結(jié)果根據(jù)具體的類型就只是一個(gè)for循環(huán)或者什么都沒有。這里的關(guān)鍵在于__type_traits這個(gè)模板類上,它根據(jù)不同的T類 型定義出不同的has_trivial_destructor的結(jié)果,如果T是簡單類型,就定義為__true_type類型,否則就定義為 __false_type類型。其中__true_type、__false_type只不過是兩個(gè)沒有任何內(nèi)容的類,對(duì)程序的執(zhí)行結(jié)果沒有什么意義,但 在編譯器看來它對(duì)模板如何特化就具有非常重要的指導(dǎo)意義了,正如上面代碼所示的那樣。__type_traits也是特化了的一系列模 板類:
struct __true_type {};
struct __false_type {};
template
struct __type_traits
{
public:
typedef __false _type has_trivial_destructor;
……
};
template<> //模板特化
struct __type_traits //int的特化版本
{
public:
typedef __true_type has_trivial_destructor;
……
};
…… //其他簡單類型的特化版本
如果要把一個(gè)自定義的類型MyClass也定義為不調(diào)用析構(gòu)函數(shù),只需要相應(yīng)的定義__type_traits的一個(gè)特化版本即可:
template<>
struct __type_traits
{
public:
typedef __true_type has_trivial_destructor;
……
};
相關(guān)推薦:
計(jì)算機(jī)等級(jí)考試二級(jí):C++學(xué)習(xí)重點(diǎn)分析試題 2010年全國計(jì)算機(jī)等級(jí)考試全攻略(一至四級(jí)) 2010年計(jì)算機(jī)等級(jí)考試二級(jí)公共基礎(chǔ)知識(shí)教程