為什麼std less設計為函式物件模板而不直接寫成函式模板?

時間 2021-05-30 04:50:19

1樓:楊博

std::less是 C++98 就引入的標準庫函式。當年還沒有constexpr,如果把函式模板myless傳入std::

sort,會變成乙個函式指標。當年的編譯器沒法內聯對函式指標的呼叫。而如果傳入std::

less,可以在編譯時確定函式物件的實現,所以可以內聯。

即使是現在的gcc,提供了constexpr,在複雜情況下也沒辦法內聯函式指標

Compiler Explorer - C++ (x86-64 gcc 10.2)

我的答案和XZiar的答案結論不同,因為 @XZiar 的例子太簡單了。如果是std::sort這樣複雜的函式還是不能內聯的。

2樓:d41d8c

一開始是因為它需要提供result_type、first_argument_type、second_argument_type,從而讓它可以用於早期的函式物件介面卡(binder2nd、binary_negate等等)。

現在的介面卡不需要這些成員型別了。但是現在因為有了 Transparent functors 和 CTAD ,可以寫std::less{}或者std::

less(),也不需要尖括號了。

為什麼 函式 叫做 函式 ?

星星之火 中國古代 函 字與 含 字通用,都有著 包含 的意思 李善蘭給出的定義是 凡式中含天,為天之函式 中國古代用天 地 人 物4個字來表示4個不同的未知數或變數 這個定義的含義是 凡是公式中含有變數x,則該式子叫做x的函式 所以 函式 是指公式裡含有變數的意思 豬鼻蛇 這個題目的含義只能是 最...

leveldb為什麼要設計為多層結構呢?

mwish 以 LevelDB 為例,如果你的記憶體結構落盤的話,舉兩個極端的例子 可以採用很多 L0 的 SST 這樣的形式,只有minor compaction。可以採取非 L0 那樣,只有一層,每次寫合併一次,合併到乙個大的檔案裡。同時,資料也是不斷增加的,所以我們希望 資料的個數不能太多,如...

為什麼 C 語言被設計成函式需要先宣告才能被使用?

李鵬 理論上,完全可以做到不宣告,直接使用。但C語言非常古老,跟現在的高階語言相比,自然有很多原始的地方。對函式進行宣告的好處是,能夠簡化編譯器的開發。在最早的K R標準裡,函式的宣告不需要宣告函式的引數,只需要告訴編譯器函式名和返回值就可以了。這樣的話,在編譯器中,函式名被當做乙個指標,對編譯器來...