首页 >后端开发 >C++ >C 中的 ODR 使用是什么?

C 中的 ODR 使用是什么?

Patricia Arquette
Patricia Arquette原创
2024-12-08 11:39:12777浏览

What Constitutes an ODR-Use in C  ?

什么是“odr-use”?

在 C 语言中,“odr-use”指的是在编译期间必须提供实体定义的情况。该术语将其与不需要实际定义的纯粹声明区分开来。

在不提供直接定义的情况下声明实体的能力对于模块化编程至关重要,因为它允许分离接口(头文件)来自实现(源文件)。但是,为了确保跨编译单元的行为一致,C 标准定义了何时必须定义实体的特定规则。

“odr-use”的定义

根据 C 标准,实体在以下情况下是“odr-used”:

  • 它的名称显示为潜在评估的表达式,这意味着它可以在表达式中使用实际评估的
  • 它是重载解析期间一组候选函数的成员,即使没有选择
  • 它是一个非纯虚函数,即使没有显式调用

ODR 使用和类模板成员函数

在类模板的上下文中,成员函数仅在以下情况下才会被实例化:已使用 odr。这意味着,如果在一个编译单元中实例化类模板,则只有实际调用或用作重载决策一部分的成员函数才会在该单元中实例化。其他成员函数在使用之前将保持未实例化状态。

此行为对于防止不必要的模板成员实例化至关重要,这可以显着减少编译时间并提高整体程序效率。它还允许灵活的模板设计,使用户能够创建通用类并根据其特定需求仅实例化必要的功能。

以上是C 中的 ODR 使用是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

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