首頁 >後端開發 >C++ >什麼是 C 語言中的 ODR 使用以及何時需要定義?

什麼是 C 語言中的 ODR 使用以及何時需要定義?

Patricia Arquette
Patricia Arquette原創
2024-12-06 12:05:15704瀏覽

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