constと参照渡し（？）の使い方


C++初心者です。このコードのRect()の中でconstにするのは初期化によってtopやleftの値を変えられないようにするためでしょうか？また、参照渡しならfloat
&topにするべきなのではないのですか？それともfloat& topは参照渡しではなく他の何かを意味するのでしょうか。教えてください。

[code]

    class Rect{
        public:
            Rect(const float& top,const float& left,const float& bottom,const float& right){a = top; b = left; c = bottom; d = right;}
            void member(){std::cout << a << b << c << d << std::endl;};
            float getArea();
            ~Rect(){}
        private:
            float a, b, c, d;
    };
    
[/code]




参照が型として使えるC++で「参照渡し」と言う言い方が適当かどうかは疑問なんですが、特に概念的に全く異なったものを表しているわけではないので、まぁありかなと言うことにしておきます。

**_初期化によってtopやleftの値を変えられないようにするためでしょうか？_**

「変えられないようにする」と言うよりは、「このコンストラクターはパラメータを参照で受け取るけど、値は変更しませんよ」と宣言しているわけです。もちろん「変更しませんよ」と言っているのに値を変更しようとすればコンパイラがエラーとして検出しますから、「変えられないようにする」と言う見方も間違いではありません。

**_参照渡しならfloat &topにするべきなのではないのですか？それともfloat& topは参照渡しではなく他の何かを意味するのでしょうか。_**

ポインタ型を宣言する場合、`float *pTop`と書いても、`float*
pTop`と書いても良いのは理解されているでしょうか?参照を表す`&`もポインタを表す`*`と同様の文法で解析されます。

C++言語では一般的に識別子と記号の間には任意個の空白文字を置けるので、なんなら`float &
top`なんて書き方をしたって構いません。特定の空白の置き方をしたときだけ「参照渡し」になるわけではありません。




参照が型として使えるC++で「参照渡し」と言う言い方が適当かどうかは疑問なんですが、特に概念的に全く異なったものを表しているわけではないので、まぁありかなと言うことにしておきます。

**_初期化によってtopやleftの値を変えられないようにするためでしょうか？_**

「変えられないようにする」と言うよりは、「このコンストラクターはパラメータを参照で受け取るけど、値は変更しませんよ」と宣言しているわけです。もちろん「変更しませんよ」と言っているのに値を変更しようとすればコンパイラがエラーとして検出しますから、「変えられないようにする」と言う見方も間違いではありません。

**_参照渡しならfloat &topにするべきなのではないのですか？それともfloat& topは参照渡しではなく他の何かを意味するのでしょうか。_**

ポインタ型を宣言する場合、`float *pTop`と書いても、`float*
pTop`と書いても良いのは理解されているでしょうか?参照を表す`&`もポインタを表す`*`と同様の文法で解析されます。

C++言語では一般的に識別子と記号の間には任意個の空白文字を置けるので、なんなら`float &
top`なんて書き方をしたって構いません。特定の空白の置き方をしたときだけ「参照渡し」になるわけではありません。

