首页 >后端开发 >C++ >C 模板中 ODR 使用的构成是什么以及它与实例化有何关系?

C 模板中 ODR 使用的构成是什么以及它与实例化有何关系?

Susan Sarandon
Susan Sarandon原创
2024-12-11 09:43:11502浏览

What Constitutes ODR-Use in C   Templates and How Does It Relate to Instantiation?

理解“odr-use”的概念

在 C 编程领域,与单一定义规则相关的一个关键方面( ODR)是“odr-使用”。此定义表示特定实体(例如类模板中的成员函数)必须在代码中提供相应的定义。

需要澄清的是,仅声明是不够的;还需要在代码中提供相应的定义。实体必须以触发 ODR 使用的方式显式使用。这个概念的产生是因为“使用”可以根据上下文有不同的解释。因此,该标准使用术语“odr-use”来表达特定要求。

值得注意的是,纯虚函数的存在会自动导致 ODR-use,无论它是否实际在内部使用代码库。这种行为源于与纯虚函数相关的独特属性。

ODR 使用和模板实例化

在模板领域,ODR 使用起着关键作用与实例化过程一起进行。 C 标准的 14.7 节阐明了需要模板实例化的条件。然而,出现的一个基本原则是模板实例化和 ODR 使用之间的直接关联。

进一步说明,模板仅在代码中使用时才会被实例化。本文中的“使用”特指 ODR 使用。因此,类模板的成员函数在被调用时或在类本身被实例化并且成员函数被指定为虚拟时被实例化。

通过拥抱这一原则,该标准使开发人员能够实例化一个列出不支持小于运算符 (<) 的元素类型,同时排除在该特定列表上使用排序方法。这种方法确保底层元素类型不会对列表本身的实例化造成阻碍。

以上是C 模板中 ODR 使用的构成是什么以及它与实例化有何关系?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn