村田です。
> こちらは、かわむら@DSTです。
>
> ex) inline int &rTest(){ return Philippine.test; };
> rTest()++;// Philippine.testのインクリメント
> # 中野@PALさんのマクロとの違いは、アクセス制限を掛けられる点です。
つけたしておくと、型とかデバックのときに見えるとか、とにかくマクロよりは良い
ですね。
> >参照型のメンバを使えば、アドレス計算を省略できるからだと思います。
> int は、クラス(や構造体)ではないから、メンバはもてません。
> また、かわむらはアドレス計算の省略はコンパイラの最適化に任せるべき、
> と 考えますが いかがでしょう。
いえ、この場合は、eがintでabcdはクラス(あるいは構造体)ということです。
>a.b.c.d.e.f みたいな深いアドレス計算になったらどうなるんでしょうね。もし
>も気が向いたらやりますが、期待はしないでください。
変わらないですね。考えてみれば構造体のメンバのオフセットは事前にわかっている
ので一発でアクセスできるのですね。訂正します。アドレス計算が計算が省略できる
のは、参照や、ポインタだった場合ですね。つまり、
a->b->c->d->e->f
の時です。
> >>ところで、この参照変数って、実体は持っているのでしょうか?
> >>(例えば、constポインタで実装されているとか)
> >>ご存知の方、教えて下さい。
> >
> >実体を持っていると思います。sizeofで調べればすぐわかりますね。
>
> 実装方法は、各々のコンパイラ(と最適化)に依存しそうな気がしますが、
> 実体は持っていないです。
> ただし、参照先のアドレスを持つための領域は持っているかもしれないです。
> 調べるのであれば、sizeofでなく、&(アドレス演算子)でしょう。
すいません。実体というのはアドレスを格納している領域ということです(86ではお
そらく4バイト)。
私のいいたかったのは、基本的には参照といえども、アドレスを格納している限り、
ポインタと同じくサイズはあるということです。もちろん、最適化の結果、サイズが
なくなることはあるでしょうが。
あと、sizeofを使うというのは、
struct Hoge {
int i ;
} ;
より、
struct Hoge {
int i ;
int &ref ;
} ;
の方が大きくなるので、サイズがあるのではと。
> こちらは、かわむら@DSTです。
>
> ex) inline int &rTest(){ return Philippine.test; };
> rTest()++;// Philippine.testのインクリメント
> # 中野@PALさんのマクロとの違いは、アクセス制限を掛けられる点です。
つけたしておくと、型とかデバックのときに見えるとか、とにかくマクロよりは良い
ですね。
> >参照型のメンバを使えば、アドレス計算を省略できるからだと思います。
> int は、クラス(や構造体)ではないから、メンバはもてません。
> また、かわむらはアドレス計算の省略はコンパイラの最適化に任せるべき、
> と 考えますが いかがでしょう。
いえ、この場合は、eがintでabcdはクラス(あるいは構造体)ということです。
>a.b.c.d.e.f みたいな深いアドレス計算になったらどうなるんでしょうね。もし
>も気が向いたらやりますが、期待はしないでください。
変わらないですね。考えてみれば構造体のメンバのオフセットは事前にわかっている
ので一発でアクセスできるのですね。訂正します。アドレス計算が計算が省略できる
のは、参照や、ポインタだった場合ですね。つまり、
a->b->c->d->e->f
の時です。
> >>ところで、この参照変数って、実体は持っているのでしょうか?
> >>(例えば、constポインタで実装されているとか)
> >>ご存知の方、教えて下さい。
> >
> >実体を持っていると思います。sizeofで調べればすぐわかりますね。
>
> 実装方法は、各々のコンパイラ(と最適化)に依存しそうな気がしますが、
> 実体は持っていないです。
> ただし、参照先のアドレスを持つための領域は持っているかもしれないです。
> 調べるのであれば、sizeofでなく、&(アドレス演算子)でしょう。
すいません。実体というのはアドレスを格納している領域ということです(86ではお
そらく4バイト)。
私のいいたかったのは、基本的には参照といえども、アドレスを格納している限り、
ポインタと同じくサイズはあるということです。もちろん、最適化の結果、サイズが
なくなることはあるでしょうが。
あと、sizeofを使うというのは、
struct Hoge {
int i ;
} ;
より、
struct Hoge {
int i ;
int &ref ;
} ;
の方が大きくなるので、サイズがあるのではと。