我們有這個頭檔案:headerA.h
#pragma once
#include <iostream>
void HeaderADefinedFunction()
{
std::could << "HeaderDefinedFunction called!\n";
}
然后在 sourceB.cpp 里面
#include "headerA.h"
void FunctionB()
{
HeaderADefinedFunction();
}
在 sourceC.cpp 里面
#include "headerA.h"
void FunctionC()
{
HeaderADefinedFunction();
}
在頭檔案本身中定義函式 HeaderADefinedFunction() 有哪些負面影響。該定義是否是該特定函式的鏈接時符號決議的最佳形式?
uj5u.com熱心網友回復:
如圖所示的代碼應該會產生一個帶有多重定義HeaderADefinedFunction()符號的鏈接失敗。
使代碼真正有效,必須使功能inline。
在頭檔案中定義函式是否不當?
一點也不。事實上,template函式必須在頭檔案1 中定義。
在頭檔案本身中定義函式 HeaderADefinedFunction() 有哪些負面影響。
一個缺點是,如果你改變了定義,你必須重建每 .cpp其中#includes ^這個頭,增加重建時間。
另一個是您的目標檔案更大。
該定義是否是該特定函式的鏈接時符號決議的最佳形式?
如果您在頭檔案中定義函式(并使其行內),編譯器可能會選擇將其行內到某些(或全部)呼叫站點中。不需要 LTO。
如果不這樣做,編譯器將無法執行此類行內,除非您使用 LTO。
1除非您知道template實體化的所有型別并為所有型別提供顯式實體化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386152.html
