Skip to content
Silica edited this page May 4, 2012 · 3 revisions

比較演算の挙動は2項演算の基本通り、左項の型に従う.
その為異なる型間の比較では
a == bb == 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である.

Clone this wiki locally