なが月・13日目

13日目

帰宅後から開始。C++のリファレンスはT& 変数名 = T型の変数;と記述し、

#include<bits/stdc++.h>
using namespace std;
void mySwap(int& a, int& b){ // std::swapがあるので
int tmp = a;
a = b;
b = tmp;
}
int main(){
int p = 5;
int q = 3;
mySwap(p, q);
cout << p << endl; // 3
return 0;
}

というように仮引数の型指定の時以外は余計な記号について考えなくてもよいようになっているので、記法が統一されて簡便になるとのことである。なるほど関数内でこれはリファレンスか値かを常に意識する必要がなくなるのはよいが、関数に副作用があることを関数定義を見ないことには知る術がなくその点で悪化もしているのではないかと思った。定義でも呼び出しでもrefの明記を強いることで「これは参照渡し、渡した変数が変更されるかもしれない」と知らしめておきつつ、引数の操作(記法)は通常と同じ、というC#スタイルが一番納得がいく。来学期の講義でポインタを使う際はCとC++を混同しないように心がけたい。

AtCoderのAPG4bを流し読みしていると、Pythonのdictに相当するものとしてmapがあるということが分かった。Perlではハッシュ、Python/C#ではDictionary、C++ではmapと名前がいろいろである。