C 函式模板的顯示呼叫與隱式呼叫

2022-02-11 09:39:12 字數 726 閱讀 4097

首先定義函式模板:

template

inline

const t& c_max (const t& a, const t& b)

那麼隱式呼叫也就是隱式的引數型別推導,根據引數型別決定函式模板的編譯,如:

// implicitly

c_max(1, 2);

使用最多的,也是隱式呼叫,上面**將使用引數型別為int的編譯模板。

那麼什麼是顯示呼叫呢?如下:

// explicitly

c_max(1, 2);

上面的呼叫會將引數先強制轉換為double型別,然後呼叫編譯型別為double模板函式。

那麼這麼做有什麼用呢?當使用兩個不同型別的引數呼叫時,會有什麼結果呢?

c_max(1, 2.1);
編譯時會出現類似下面的錯誤:

error: no matching function

forcall

to 『c_max(int, double)』

這個時候就需要使用顯示的呼叫,如:

c_max(1, 2.1);
測試**:

(完)

顯示呼叫和隱式呼叫

使用類名呼叫時顯式呼叫。c 中,顯式介面只能使用介面呼叫,隱式介面使用類和介面呼叫皆可。c 首先動態庫分為顯示呼叫和隱式呼叫,這個的區別呢,顯示呼叫 需要loadlibray和freelibrary,隱式呼叫不需要loadlibrary和freelibrary,只是需要匯入相關的lib檔案,因此,如...

java 隱式呼叫和顯示呼叫

當我們在呼叫類的構造器來建立物件的時候,首先要呼叫的是父類的非靜態的初始化塊,接著會呼叫構造器,但是父類的構造器可能有多個,也就是過載,當呼叫完父類的非靜態初始化塊之後,將會呼叫的是當前類的非靜態初始化塊然後是自身的建構函式,呼叫父類的建構函式就有兩種呼叫的方式,乙個是顯示呼叫,另乙個是隱式呼叫,下...

dll顯示呼叫和隱式呼叫

pragma once 避免重複編譯 ifdef creatdll exports 這個巨集只要你選了專案配置型別為.dll,在預處理器裡會自動包含.define dll api declspec dllexport else define dll api declspec dllimport 當編...