1 constexpr是C++11中新增的關鍵字,其語義是“常量表達式”芯砸,也就是在編譯期可求值的表達式萧芙。
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ù)實參的函數(shù)形參双揪。
至少有一個參數(shù)包的模板被稱作變參數(shù)模板。
變參數(shù)類模板可用任意數(shù)量的模板參數(shù)實例化:
template<class ... Types> struct Tuple {};
Tuple<> t0; // Types 不包含實參
Tuple<int> t1; // Types 包含一個實參: int
Tuple<int, float> t2; // Types 包含二個實參: int 與 float
Tuple<0> error; // 錯誤: 0 不是類型
變參數(shù)函數(shù)模板可用任意數(shù)量的函數(shù)實參調(diào)用(模板參數(shù)通過模板實參推導推導):
template<class ... Types>
void f(Types ... args);
f(); // OK : args 不包含實參
f(1); // OK : args 包含一個實參: int
f(2, 1.0); // OK : args 包含二個實參: int 與 double
如果在頭文件里面定義函數(shù)虎谢,它被幾個cpp文件include的時候盟榴,會觸發(fā)鏈接錯誤,如果函數(shù)較小婴噩,加上inline 即可,或者用static關鍵字