模板的非类型参数

Mah*_*esh 1 c++

可能重复:
模板<unsigned int N>是什么意思?

嗨!非类型模板参数和常量是否相同?执行以下代码是否有效,因为模板参数无法修改?如果可以修改,则在声明数组"a [T]"时编译器应该抛出错误.我的理解是否正确?

template < int T > 
void foo() {  
  int a[T] ;  
}  

int main( int argc, const char* argv[] ) {  
  foo <3> () ;  
  system("pause") ;  
  return 0 ;  
}
Run Code Online (Sandbox Code Playgroud)

Dr *_*r G 6

是的,有点.每次实例化模板时,编译器都会为特定类型的参数化生成特定代码.因此,例如,在您的示例中,如果您有foo<3>,foo<5>并且编译器将为两个单独的函数生成代码,其中T=3一个在哪里T=5

所以是的,它起作用是因为T不能改变,它运作的机制稍微复杂一点虽然......