和函数求值类似,当模版的形参被实参替换时,模版会进行编译器计算。由于模版支持类型参数和非类型参数,故支持两种计算
- 类型参数:类型计算
- 非类型参数:数值计算
模版的实参在编译器传入,计算结果由模版内部定义的
enum或static const的整形对象保存! C++这种编译期计算支持的计算对象只能是整形常量和类型
class SourceFile{public://隐式类型转换+模板函数参数推导-->自动推导出Ntemplate<int N>SourceFile(const char (&arr)[N]): data_(arr),size_(N-1){const char* slash = strrchr(data_, '/'); // builtin functionif (slash){data_ = slash + 1;size_ -= static_cast<int>(data_ - arr);}}explicit SourceFile(const char* filename): data_(filename){const char* slash = strrchr(filename, '/');if (slash){data_ = slash + 1;}size_ = static_cast<int>(strlen(data_));}const char* data_;int size_;};
