首页 >后端开发 >C++ >什么是 C 语言中的 ODR 使用以及何时需要定义?

什么是 C 语言中的 ODR 使用以及何时需要定义?

Patricia Arquette
Patricia Arquette原创
2024-12-06 12:05:15733浏览

What is ODR-Use in C   and When is a Definition Required?

理解 C 中的“odr-use”

在 C 中,“一个定义规则”(ODR)的概念确保对于每个在多个编译单元中声明的实体,只存在一个定义。然而,确定何时需要定义可能会令人困惑。术语“odr-use”在这种情况下发挥作用。

根据 C 标准,变量或函数是 odr-used:

  • 如果其名称出现在潜在求值表达式,并且不是适合常量表达式求值的对象。
  • 在非重载函数的情况下,如果其名称出现在潜在评估的表达式或由重载决议选择的一组候选函数中。

这个定义有点抽象,所以让我们简化它。 Odr-use 本质上意味着实体的使用方式必须在程序中的某个位置进行定义。这包括实际用法,例如调用函数或访问变量,以及潜在用法,例如成为重载决策的候选者。

对于类模板成员函数,它们仅被实例化(并因此定义)(如果它们是 ODR 使用的)。这意味着必须调用它们,或者必须使用虚拟成员函数来实例化类本身。

标准依赖于这一原则来防止不必要的实例化。例如,std::list::sort函数需要operator

理解 odr-use 对于避免与丢失相关的错误至关重要定义和多个编译单元中的多个定义。通过遵循这些规则,程序员可以编写健壮且可维护的 C 代码。

以上是什么是 C 语言中的 ODR 使用以及何时需要定义?的详细内容。更多信息请关注PHP中文网其他相关文章!

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