std::ranges::less
來自 cppreference.com
定義於標頭檔案 <functional> |
||
struct less; |
(C++20 起) | |
用於執行比較的函式物件。從引數推導函式呼叫運算子的引數型別(但不推導返回型別)。
目錄 |
[編輯] 巢狀型別
巢狀型別 | 定義 |
is_transparent
|
未指定 |
[編輯] 成員函式
operator() |
檢查第一個引數是否小於第二個引數 (公開成員函式) |
std::ranges::less::operator()
template< class T, class U > constexpr bool operator()( T&& t, U&& u ) const; |
||
給定表示式 std::forward<T>(t) < std::forward<U>(u) 作為 expr
- 如果轉換後的 t 在指標的實現定義嚴格全序中先於轉換後的 u(兩者都為型別
P
),返回 true,否則返回 false。 - 如果從
T
到P
的轉換序列或從U
到P
的轉換序列不是保持相等的,則行為未定義。
- 如果轉換後的 t 在指標的實現定義嚴格全序中先於轉換後的 u(兩者都為型別
- 否則
- 返回 expr 的結果。
- 如果未建模 std::totally_ordered_with<T, U>,則行為未定義。
此過載僅在滿足 std::totally_ordered_with<T, U> 時才參與過載決議。
如果存在型別為 T
的表示式 expr1 和型別為 U
的表示式 expr2,使得 expr1 和 expr2 的比較結果違反嚴格全序(規則定義如下),則行為未定義。
只有當以下表達式中恰好一個為 true 時,expr1 和 expr2 的比較結果才遵循嚴格全序:
- std::ranges::less{}(expr1, expr2)
- std::ranges::less{}(expr2, expr1)
- std::ranges::equal_to{}(expr1, expr2)
[編輯] 注意
與 std::less 不同,std::ranges::less
要求所有六個比較運算子 <
、<=
、>
、>=
、==
和 !=
都是有效的(透過 totally_ordered_with
約束)。
[編輯] 示例
本節不完整 原因:無示例 |
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 3530 | C++20 | 比較指標時放寬了語法檢查 | 僅放寬了語義要求 |
[編輯] 參閱
實現 x < y 的函式物件 (類模板) |