理解 C 中的 ODR 使用
在 C 编程环境中,讨论类时经常会出现“odr 使用”的概念模板成员函数。
单一定义规则 (ODR) 确保每个实体都有一个一致的定义跨程序中的所有翻译单元。 ODR-use 定义了实体何时必须提供定义,而不是简单的声明。
根据 C 标准,如果满足以下条件,则非重载函数被 odr-use:
ODR-使用和类模板成员函数
用于类模板成员函数,ODR 使用规则意味着它们只有在满足条件时才会被实例化是:
此规则确保模板成员函数仅在实际需要时才实例化。默认情况下,编译器不会实例化未使用的成员函数,从而节省编译时间。
ODR-使用和多个编译单元
当使用多个编译单元时,编译器必须确保所有 ODR 使用的实体仅定义一次。它通过“主模板”的概念来实现这一点。主模板是翻译单元中模板的第一个实例。其他翻译单元中的所有后续模板实例化都被视为辅助实例化。
主模板负责提供 odr 使用的实体的定义。如果成员函数是 ODR 使用的,但未在主模板中调用,则仍必须使用定义来声明它以满足 ODR。
实例化所有成员函数
显式实例化类模板可以保证所有成员函数的实例化,包括未调用的 odr 使用的函数。这确保了完整的定义可用于所有编译单元,从而避免潜在的链接错误。然而,实例化未使用的成员函数并不总是必要或有效的。
以上是C 类模板成员函数中的 ODR 使用是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!