簡體   English   中英

為什么作用域枚舉默認支持運算符'<'?

[英]Why does the scoped enum support operator '<' by default?

考慮:

enum class Number {one, two};

if (Number::one < Number::two)
{}

我的理解是,scoped枚舉需要被包裝到底層類型或整數中,然后它可以應用於operator <> ==。 但看起來上面的代碼片段可以在沒有任何顯式重載運算符<情況下工作。

我在枚舉聲明中沒有看到任何描述。

C ++標准說明默認情況下哪個運算符支持作用域枚舉?

如果您指的是“通常的算術轉換”,那么當參數是算術或枚舉類型時,它們就完成了。 只是在那里有一個特殊的子彈用於范圍的枚舉:

[EXPR]

11許多期望算術或枚舉類型的操作數的二元運算符會以類似的方式引起轉換並產生結果類型。 目的是產生一個通用類型,它也是結果的類型。 這種模式稱為通常的算術轉換,定義如下:

  • 如果任一操作數是作用域枚舉類型,則不執行任何轉換; 如果另一個操作數的類型不同,則表達式格式不正確。

所以這里涉及到這個案例。 由於兩個操作數具有相同的作用域枚舉類型,因此只需檢查它們以按照預期的方式保持特定關系。

我的理解是,scoped enum需要被裝入底層類型或整數,然后它可以應用於operator <> ==。

不是當它們都是作用域枚舉時。 SomeScopedEnum < SomeInt是不正確的,在這種情況下你是對的。

[expr.rel] p6

如果兩個操作數(轉化后)是算術或枚舉類型的,每個操作的應產生true如果指定的關系是真, false如果是假的。

暫無
暫無

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

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