本日学んだこと。
C++の==は同値性を比較している。
だからstringに対して
#include <iostream> #include <string> int main(){ std::string str = "hoge"; if(str == "hoge"){ std::cout << "str == hoge" << std::endl; }else{ std::cout << "str != hoge" << std::endl; } }
%sample.exe str == hoge
最初から
using namespace std;
を使えばいちいちスコープを指定しなくてもいいんだけど、
namespaceを使うと遅くなるらしいので現場では上の書き方をするらしい。
std::cout << "str == hoge" << std::endl; cout << "str == hoge" << endl;
Javaだと==は同一性の比較なので
class Sample { public static void main(String args[]){ String str = "hoge"; if(str == "hoge"){ System.out.println("str == hoge"); }else{ System.out.println("str != hoge"); } } }
%java Sample str != hoge
JavaでStringの比較をしたかったらString#equalsを使いましょう。
class Sample { public static void main(String args[]){ String str = "hoge"; if(str.equals("hoge")){ System.out.println("str == hoge"); }else{ System.out.println("str != hoge"); } } }
%java sample.class str == hoge
ちなみにRubyは
str = "hoge" if(str == "hoge"){ puts "str == hoge" }else{ puts "str != hoge" }
%ruby sample.rb str == hoge
同値性の比較のようですね!
まぁ、一応メソッドとしてString#eql?とString#equal?があって同値性と同一性の比較が可能
str = "hoge" str.eql?("hoge") #=> true str.equal?("hoge") #=> false
他にも
- 「endl」はバッファに溜まった文字をフラッシュするのでデバッグに役立つ
- newで動的にメモリを確保してdeleteで解放
- thisは->を使う
- コンストラクタの初期化リストはconst対策
- メソッドはクラス内で宣言するとインライン関数扱い
- コピーコンストラクタはJavaやRubyでいうところのcloneメソッド
こんなの学んだ。
C++は気持ち悪くておもしろい。
でも書きにくいので好んでやりたい言語じゃないなー