0

私は例えばこれを持っています:

void SetWidth(double width);

それは次のとおりです。

void SetWidth(const double width);
4

6 に答える 6

1

簡単な答え: 「この引数は、この関数の本体内で変更されない」constことを保証する (または明示的に表現する) ことが理にかなっている場合は、引数を値で受け取る関数を実装します。

const呼び出し元に明示的に伝えたい場合は、参照によって引数をとる関数を実装します。 「この関数は、渡された引数を変更しません。」

(「セッター」が引数を値で受け取る場合 (など) SetWidth、使用してもあまり意味がありませんconst)

于 2013-09-02T16:06:09.770 に答える
1

それらはほぼ同等です。

唯一の違いは、を使用するときに関数スコープ内で変数を変更できないことをコンパイラに伝えることwidthconstです。

于 2013-09-02T16:06:29.783 に答える
1

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);] を使用すると、可変幅が定数であり、関数内で変更できないことが保証されます。

お役に立てれば。

于 2013-09-02T16:20:47.810 に答える