2017-08-16,17c++筆記

1 constexpr是C++11中新增的關(guān)鍵字,其語義是“常量表達(dá)式”,也就是在編譯期可求值的表達(dá)式。

constexpr int Inc(int i) {
    return i + 1;
}
 
constexpr int a = Inc(1); // ok
constexpr int b = Inc(cin.get()); // !error
constexpr int c = a * 2 + 1; // ok

2 模板參數(shù)包是接受零或更多模板實(shí)參(非類型、類型或模板)的模板形參。函數(shù)模板形參報(bào)是接受零或更多函數(shù)實(shí)參的函數(shù)形參。
至少有一個參數(shù)包的模板被稱作變參數(shù)模板。

變參數(shù)類模板可用任意數(shù)量的模板參數(shù)實(shí)例化:

template<class ... Types> struct Tuple {};
Tuple<> t0; // Types 不包含實(shí)參
Tuple<int> t1; // Types 包含一個實(shí)參: int
Tuple<int, float> t2; // Types 包含二個實(shí)參: int 與 float
Tuple<0> error; // 錯誤: 0 不是類型

變參數(shù)函數(shù)模板可用任意數(shù)量的函數(shù)實(shí)參調(diào)用(模板參數(shù)通過模板實(shí)參推導(dǎo)推導(dǎo)):

template<class ... Types> 
void f(Types ... args);
f(); // OK : args 不包含實(shí)參
f(1); // OK : args 包含一個實(shí)參: int
f(2, 1.0); // OK : args 包含二個實(shí)參: int 與 double

如果在頭文件里面定義函數(shù),它被幾個cpp文件include的時候,會觸發(fā)鏈接錯誤,如果函數(shù)較小,加上inline 即可,或者用static關(guān)鍵字

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容