簡體   English   中英

為什么std :: ratio不支持比較運算符?

[英]Why does std::ratio not support comparison operators?

由於C ++標准庫通常為其類提供重載運算符,我想知道為什么存在比較函數(實際上不是函數,而是使用重載() - 運算符的結構)但是沒有std :: ratio類的比較運算符。

我認為他們會提供更好的使用和可讀性,也可以在編譯時執行。

即使他們的特定解決方案需要使用結構進行模板元編程,將它包裝到另一個函數中應該沒有問題:

template<intmax_t N1, intmax_t D1, intmax_t N2, intmax_t D2>
constexpr bool operator==(const ratio<N1, D1>& first, const ratio<N2, D2>& second) {
    return ratio_equal<ratio<N1,D1>, ratio<N2,D2>>();
}

實際上對我有用,也可以很容易地為所有其他運營商采用

所以,我錯過了什么,或者有人知道為什么他們決定不支持這里的運營商?

很可能在撰寫N2661提案時,constexpr尚未存在。 我發現constexpr的第一次出現是在N2235 ,所以很可能至少沒有編譯器實現它,並且可能甚至不確定它將在未來的標准中考慮。 這只是一個猜測,也許甚至不值得這個答案。

ratio類不是為了實例化而設計的; 它沒有數據成員,因此基於它的任何對象都不包含類類型本身之外的任何信息。 由於必須針對對象而不是類型調用運算符,因此提供它們是沒有意義的。 它甚至會適得其反,因為它意味着實例化這個類會很有用。

如果你真的需要運行時對象而不是編譯時類型,我建議ratio可能不是合適的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM