C++の参照型について学んだ

llvmチュートリアル、kaleidoscopeをやっていて、何だろうと思ったので調べた。

int a=100;
int &b=a;
b = 99;
printf("%d,%d\n",a,b);

これをやると両方99になるというやつ。

#include <cstdio>
using namespace std;

int main(){
        int a = 100;
        int &b = a;
        printf("%p,%p\n",&a,&b);
        return 0;
}

アドレスを表示してみる。

% ./a.out                                                        (git)-[master]
0x7ffeebeba978,0x7ffeebeba978

同じだ。 これはポインタで間接参照演算子*を使えばできるやつだなって最初思った。 javaとかのオブジェクトは参照型だから関数とかに渡した時に呼び出し先で変えると呼び出し元も変わってるってやつだよね。

基本C言語がメインで書いてたしめちゃめちゃ不思議な感覚。 pythonは全てオブジェクトとして扱うけど、基本的なやつは、参照型じゃないのよね

>>> a = 100
>>> b = a
>>> b = 99
>>> print(a,b)
100 99
>>> a = [1,2,3,4]
>>> b = a
>>> b[1]=4
>>> a
[1, 4, 3, 4]

よく考えたらこれも不思議だよねって ちょっと不思議だなと思いつつちょっと便利だなとも思ったえぬわいであった...