私は例えばこれを持っています:
void SetWidth(double width);
それは次のとおりです。
void SetWidth(const double width);
簡単な答え: 「この引数は、この関数の本体内で変更されない」const
ことを保証する (または明示的に表現する) ことが理にかなっている場合は、引数を値で受け取る関数を実装します。
const
呼び出し元に明示的に伝えたい場合は、参照によって引数をとる関数を実装します。 「この関数は、渡された引数を変更しません。」
(「セッター」が引数を値で受け取る場合 (など) SetWidth
、使用してもあまり意味がありませんconst
)
それらはほぼ同等です。
唯一の違いは、を使用するときに関数スコープ内で変数を変更できないことをコンパイラに伝えることwidth
const
です。
For, Void SetWidth(double width);
関数 SetWidth() で可変幅の値を変更できます。ただし、変更された値は呼び出された関数に反映されません。言う、
class A_Class
{
public:
void SetWidth(double width) {
width=width+10;
this._width=width;
std::cout<<"IN SetWidth:"<<width;
}
private:
double _width;
};
int main()
{
A_Class aObj;
double twidth=20.9;
aObj.SetWidth(twidth);
std::cout<<"twidth:"<<twidth;
return 0;
}
O/P: IN SetWidth:30.9
twidth:20.9
ですので、別の原型「void SetWidth(const double width);」でおっしゃっていた、constにしても構いません。
内部的に、コンパイラはスタック内の「幅」変数にメモリを割り当て、値をその変数にコピーします。2 番目のプロトタイプ [void SetWidth(const double width);] を使用すると、可変幅が定数であり、関数内で変更できないことが保証されます。
お役に立てれば。