とんちゃんといっしょ

Cloudに関する技術とか日常とかについて書いたり書かなかったり

研修2日目

本日学んだこと。


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対策
  • メソッドはクラス内で宣言するとインライン関数扱い
  • コピーコンストラクタJavaRubyでいうところのcloneメソッド

こんなの学んだ。


C++は気持ち悪くておもしろい。
でも書きにくいので好んでやりたい言語じゃないなー