局部和匿名类型作模板实参
2013-11-03 00:20
1081 查看
在C++98中,模板的实参类型有限制,即局部类型和匿名类型不能作为模板实参。
编译结果如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/18/d9b12be1aebe0a1269af88e5dceacbcd.png)
可以看到,使用c++98编译时,局部类型,匿名类型都无法作为模板实参,这些限制都是没有任何意义的,所以c++11作了改进,以上代码在c++11中编译是OK 的。
template <typename T> class X{}; template <typename T> void TempFun(T t){} struct A{} a; struct {int i;} b; // b是匿名类型变量 typedef struct {int i;} B; // B是匿名类型 void fun() { struct C{} c; // C是局部类型 X<A> x1; X<B> x2; X<C> x3; TempFun(a); TempFun(b); TempFun(c); }
编译结果如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/18/d9b12be1aebe0a1269af88e5dceacbcd.png)
可以看到,使用c++98编译时,局部类型,匿名类型都无法作为模板实参,这些限制都是没有任何意义的,所以c++11作了改进,以上代码在c++11中编译是OK 的。
相关文章推荐
- C#简单问题,不简单的原理:不能局部定义自定义类型(不含匿名类型)
- cpp——复合类型——函数——匿名形参 默认实参
- 非类型参数的模板实参
- JAVA匿名内部类不能访问外部类方法中的局部变量,除非变量被声明为final类型
- C#3.0新特性――隐含类型局部变量和匿名类型
- 非类型形参的模板实参
- 类模板中非类型参数的模板实参
- 类模板中非类型参数的模板实参
- 第二遍C++primer->函数模板类型实参的受限转换
- [置顶] 为什么匿名内部类和局部内部类只能访问final类型参数
- 为什么匿名内部类只能访问其所在方法中的final类型的局部变量?
- 谈谈”隐藏类型局部变量、扩展方法、对象与集合初始化器、匿名类型“
- C#特性 匿名类型与隐式类型局部变量使用介绍
- C++语法基础--模板实参推断,模板类型形参的实参的受限转换,模板实参推断与函数指针
- c++中模板类型的类型形参与实参的转换
- 模板类型实参和非类型实参的使用 ----- 基于模板的函数指针的使用
- 非类型形参的模板实参
- C#之匿名类型与隐式局部变量
- Java基础_内部类、静态内部类、成员内部类、局部内部类、匿名内部类 (转)
- 为什么匿名内部类参数必须为final类型