C# 泛型和 C++ 模板都是用于提供参数化类型支持的语言功能。 然而,这两者之间存在许多差异。 在语法层面上,C# 泛型是实现参数化类型的更简单方法,不具有 C++ 模板的复杂性。 此外,C# 并不尝试提供 C++ 模板所提供的所有功能。 在实现层面,主要区别在于,C# 泛型类型替换是在运行时执行的,从而为实例化的对象保留了泛型类型信息。 有关更多信息,请参见 运行时中的泛型(C# 编程指南)。

以下是 C# 泛型和 C++ 模板之间的主要差异:

  • C# 泛型未提供与 C++ 模板相同程度的灵活性。 例如,尽管在 C# 泛型类中可以调用用户定义的运算符,但不能调用算术运算符。

  • C# 不允许非类型模板参数,如 template C<int i> {}。

  • C# 不支持显式专用化,即特定类型的模板的自定义实现。

  • C# 不支持部分专用化:类型参数子集的自定义实现。

  • C# 不允许将类型参数用作泛型类型的基类。

  • C# 不允许类型参数具有默认类型。

  • 在 C# 中,尽管构造类型可用作泛型,但泛型类型参数自身不能是泛型。 C++ 确实允许模板参数。

  • C++ 允许那些可能并非对模板中的所有类型参数都有效的代码,然后将检查该代码中是否有用作类型参数的特定类型。 C# 要求相应地编写类中的代码,使之能够使用任何满足约束的类型。 例如,可以在 C++ 中编写对类型参数的对象使用算术运算符 + 和 - 的函数,这会在使用不支持这些运算符的类型来实例化模板时产生错误。 C# 不允许这样;唯一允许的语言构造是那些可从约束推导出来的构造。

请参见

参考

泛型介绍(C# 编程指南)

概念

C# 编程指南

其他资源

模板

转载于:https://www.cnblogs.com/zhaoliankun/p/9995273.html

C++ 模板和 C# 泛型之间的区别(C# 编程指南)相关推荐

  1. 理解面向连接和无连接协议之间的区别

               理解面向连接和无连接协议之间的区别 网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议. 面向连接和无连接指 ...

  2. java和python的web自动化有什么区别-Java Web开发和Python Web开发之间的区别

    今天的文章讨论了Java Web开发和Python Web开发之间的区别.我不鼓励我们在这里从Java Web迁移到Python Web开发.我只是想谈谈我的感受.它不一定适合所有情况,仅供我们参考. ...

  3. gophp解释器_对比平台--Go和PHP之间的区别

    Go和PHP之间的区别 Go vs PHP是软件开发行业中的两种重要语言.Golang与PHP在本质上有一些相似之处,但在同一时间,Golang与PHP之间也存在许多差异.在这里,我们将对Go vs ...

  4. 定义指令时“控制器”,“链接”和“编译”函数之间的区别

    本文翻译自:Difference between the 'controller', 'link' and 'compile' functions when defining a directive ...

  5. Spring MVC中@RequestParam和@PathVariable批注之间的区别?

    Spring MVC框架是在Java世界中开发Web应用程序最流行的框架之一,它还提供了一些有用的注释,可以从传入的请求中提取数据并将请求映射到控制器,例如@ RequestMapping,@ Req ...

  6. html5+、ReactNative、Weex、Ionic之间的区别、(配置java、python、Android环境)、ReactNative(react-native-cli)、yarn、Weex

    html5+.ReactNative.Weex.Ionic之间的区别: html5+和Ionic: 在开发原理上基本相同,都是需要先开发出一个完整的网站,再通过html5+或Ionic提供的打包技术对 ...

  7. Vue中computed、methods和watch之间的区别

    对于那些开始学习Vue的人来说,对于方法.计算属性和观察者之间的区别有点混淆. 尽管通常可以使用它们中的每一个来完成或多或少相同的事情,但了解每个人在哪里胜过其他人还是很重要的. 在这个快速提示中,我 ...

  8. matlab里的scalar,scalar_scalar与vector之间的区别

    scalar与vector之间的区别 有些物理量,既要由数值大?包括有关的单位),又要由方向才能完全确定.这些量之间的运算并不遵循一般的代数法则,而遵循特殊的运算法则.这样的量叫做物理矢量. 有些物理 ...

  9. require,include,require_once和include_once之间的区别?

    在PHP中: 什么时候应该使用require与include ? 什么时候应该使用require_once和include_once ? #1楼 您应该将类​​和函数定义组织在文件中. 使用requi ...

最新文章

  1. Redis基数统计——HyperLogLog小内存大用处
  2. mysql主从复制延时性问题_MySQL主从同步延迟原因及解决办法
  3. JAVA入门到精通-第43讲-IO编程-坦克大战10
  4. 手机升级android5.0,Android 7.0就要来了?你家手机升级到5.0了吗?
  5. vue-source的实例
  6. 资源文件(.RES)的应用
  7. Android布局加载慢,Android布局优化(四)X2C — 提升布局加载速度200%
  8. 解决:which: no java in (/root/chengxu/maven/apache-maven-3.5.2/bin:/usr/local/sbin:/usr/local/bin:/usr
  9. PID控制器改进笔记之五:改进PID控制器之串级设定
  10. php msi安装教程,如何判断msi安装包程序是否安装及安装路径
  11. iOS 评论中含有表情的处理方法
  12. 【Excel从头开始】-3 从网页导出数据到Excel
  13. 免费搭建网易云音乐API
  14. HDU3376 Matrix Again——最大费用最大流
  15. 光学红外雨量IFR202型传感器智慧检测雨量场景等行业
  16. google maps js v3 api教程(3) -- 创建infowindow
  17. JS汉字转拼音,超级实用
  18. 复旦大学计算机网络专业,复旦大学计算机网络专业计划.doc
  19. [Vue.js] 使用 babel-polyfill 解决IE浏览器 正常使用
  20. 删除单据是提示反写出错,采购系统严格控制执行数量,不允许超过关联的收料通知单数量,并且收料通知单数量不能为负数...

热门文章

  1. Buider模式应用实践
  2. Spring注解标签详解@Autowired @Qualifier等 @Slf4j
  3. USDT(omniCore)测试环境搭建
  4. 企业引进HRM系统需要规避的五大误区
  5. FPGA设计经验谈 —— 10年FPGA开发经验的工程师肺腑之言
  6. vuejs模仿实现一个电影分享类网站
  7. 设计模式-职责链模式 (分离职责,动态组合)
  8. nodejs基础 -- web模块
  9. win7键盘失灵 登陆界面键盘失效无法输入密码的解决办法
  10. [转]mysql慢查询日志