理解 C 中的 ODR 使用
在類模板的上下文中,遇到了術語「odr-use」。這個概念對於理解類別模板中成員函數的實例化起著至關重要的作用。
根據 C 標準 [basic.def.odr],如果變數或函數用於需要實際定義而不僅僅是聲明的上下文。這包括在表達式中直接引用或可能評估變數或函數的情況。但是,對於可以參與常數表達式並且立即應用左值到右值轉換的物件存在例外。
對於類別模板成員函數,定義變得更加具體:非重載函數在潛在求值表達式中引用的(成員或其他)或作為重載候選集的一部分的(成員或其他)是odr 使用的,除非它是純虛函數且其名稱未明確顯示合格。
此定義可能會引發有關 ODR 使用規則如何跨多個編譯單元應用的問題。需要澄清的是,只有在至少一個編譯單元內需要 ODR 使用時,才會實例化類別模板。簡單地實例化一個類別模板並不會自動實例化它的所有成員函數,除非它們明確地使用了 odr。
總之,ODR-use 是 C 標準中定義的一個概念,用於確定哪些實體需要實際定義。它在模板實例化中發揮重要作用,成員函數只有在編譯單元內使用 odr 時才會被實例化。
以上是何時使用 C 類模板成員函數 ODR?的詳細內容。更多資訊請關注PHP中文網其他相關文章!