-
Notifications
You must be signed in to change notification settings - Fork 7
comparison
比較演算の挙動は2項演算の基本通り、左項の型に従う.
その為異なる型間の比較では
a == b
とb == a
が同じ結果にならない場合がある.
##nil
何と比較してもfalseとなる.
nil == nil
もfalseである.
##数値型 (int,hex,float)
右項を自動的に数値として扱う.
2 == "2str"
はtrueである.
##文字列型 (string)
右項を自動的に文字列として扱う.
"2str" == 2
はfalseである.
"2" == 2
はtrueである.
大小比較は内部的なchar配列としての個別の値に基づいて行われる.
##参照型 (ref)
==と!=は参照する対象が同じかどうかを判定する.
右項がポインタではない場合、指す先が右項の変数であればtrueとなる.
参照先がないもの(nullptr)同士を==で比較してもtrueとなる.
それ以外の比較演算子は自動的に参照先の型と値として扱われる.
nullptrはnilと同じく何と比較してもfalseとなる.
##リスト型 (,,,)
要素数が1の場合は[0]の型と値として全体が扱われる.
それ以外の場合は要素を順に比較する.
比較が定義されていない型はそれなりに処理される.
##オブジェクト型 (object)
配列要素、メンバ、関数コード同士を比較する.
比較が定義されていない型はそれなりに処理される.
よって数値、文字列、ポインタあたりが一致するなら==がtrueとなる.
関数は同じ内容のコードを持つことではなく、同じコードを指しているかどうかを比較する.
##メソッド型、C関数型、Cメソッド型
全てがfalseである.
##Cポインタ型
保持している実際の内部ポインタの値で比較される.
##スレッド型 (thread)
全てfalseである.