簡體   English   中英

為什么 std::array 的 operator==() 沒有標記為 constexpr?

[英]Why isn't std::array's operator==() marked constexpr?

在編譯時比較std::array很自然的 並且它的operator==()顯然是constexpr能夠的。 然而 - 它 沒有被標記為constexpr 這是故意的還是疏忽的? 並且 - 保留這種方式的原因是什么(顯然在 C++17 中也是如此)?

P0031解釋了為什么它沒有提出constexpr比較:

當前比較和swap / fill可以在<algorithm>標頭中的算法的幫助下實現。 與 constexpr 進行標記比較將破壞這種能力,並可能導致性能下降。

例如, ==可以根據std::equal ,它 - 在適當的情況下 - 可以調用高度優化但決定不- constexpr memcmp == constexpr將在沒有特殊編譯器幫助的情況下排除此優化。

基本原理可能是這樣的:如果包含類型的==也是constexpr ,則數組的==只能是constexpr

由於容器不能強制執行,它不能(通常)提供operator==() constexpr

暫無
暫無

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

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