.cpp 檔案中的C 內聯成員函數:困境與解
在C 中,內聯成員函數通常在頭文件中聲明效率原因。但是,某些情況下可能需要在 .cpp 檔案中實作該函數。讓我們深入研究這樣的情況:
考慮以下具有循環相依性的場景:
A.h
<code class="cpp">#pragma once #include "B.h" class A { B b; };</code>
B.h
<code class="cpp">#pragma once class A; class B { inline A getA(); };</code>
B.h
要打破循環依賴,需要將getA 的實作放在
B.cpp<code class="cpp">#include "B.h" #include "A.h" inline A B::getA() { return A(); }</code>
B.cpp
困境
inline 關鍵字在頭檔和.cpp 檔案中的放置會影響函數的內聯嗎?
解決方案
不幸的是,儘管.cpp 檔案中有inline 關鍵字,編譯器不會內聯getA,除非它在B.cpp本身中使用。這是因為編譯器在遇到內聯函數時都需要定義它。通常,將函數放在頭檔中可以確保這種可用性。
最佳實務
根據 C FAQ,必須在頭檔中定義內嵌函數。將它們放在 .cpp 檔案中可能會導致無法解決的外部錯誤。
替代解決方案所提供的方案並不建議將內嵌函數放在 .cpp 檔案中的替代解決方案。 cpp 檔案。以上是內聯成員函數可以在 .cpp 檔案中定義並且仍然內聯嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!