4

私はconstキーワードを試し、そこから有用なアプローチを得ようとしていました。

#include <iostream>

class A
{
  public:
  static const void modify(float& dummy)
  {
    dummy = 1.5f;
  }  
};

int main(int argc, char* argv[])
{
  auto a = 49.5f;

  A::modify(a);

  std::cout << a << std::endl; 

  return(0);
}

このコードはコンパイルして機能し、出力は1.5次のようになります。引数の値を変更しようとしているconstメソッドがあるため、コンパイラからのエラーを予期していました。

私がここで欠けているものは何ですか?引数の値を変更しないメソッドを設計するにはどうすればよいですか?

4

2 に答える 2

5
  1. 宣言したメソッドはではありませんconstconst void(それが何であれ)を返しますが、constそれ自体は-メソッドではありません。

  2. 宣言された場合

    void modify(float& dummy) const
    

    これはconst-methodになりますが、const-methodでこれを実行できるため、引数の値を変更できます。許可されていない唯一のことは、それが属するクラスのメンバーの値を変更することです。

  3. メソッドを宣言するために、仕様constを削除する必要があることに注意してください。静的メソッドはメンバーを変更できないため、メソッドを変更することはできませんstaticstaticconst

  4. 関数が引数を変更しないようにする場合は、引数をconstにする必要があります。

    static void modify(const float& dummy)
    

const-methodで実行できることと実行できないことを説明するために、メンバーとconst-functionを持つクラスを次に示します。

class A
{
  float my_member;
public:
  void modify(float& dummy) const
  {
    my_member = dummy; // attempt to modify member -> illegal
    dummy = 1.5f;      // modifies a non-const argument -> ok
  }  
};

ご覧のとおり、メンバーを変更することはできませんが、引数の値を変更することはできます。それを防ぎたいのなら、あなたは議論をする必要がありますconst

class A
{
  float my_member;
public:
  void modify(const float& dummy) const
  {
    my_member = dummy; // attempt to modify member -> illegal
    dummy = 1.5f;      // attempt to modify a const reference -> illegal
  }  
};
于 2012-11-09T06:04:36.433 に答える
1

この場合、「const」が何を実行し、どのように動作するかを誤解しています。

まず第一に、C++では静的メンバー関数をconstにすることはできません。表示する関数は、「const void」のタイプを返します(これが理にかなっているかどうか、およびコンパイラーが警告する必要があるかどうかは別のトピックです)。

第二に、変更するすべてのパラメーターはconstではありません。'modify'が静的関数ではなく、関数に' const'修飾子があった場合でも、ダミーを変更できます。

void modify_nonstatic(float &dummy) const
{
    dummy = 1.5f; // perfectly fine - dummy isn't a member of
                  // the class and can be modified
}

パラメーターをconstにする場合は、パラメーターをconstにします。

static void modify(const float &dummy) 
{
    dummy = 1.5f; // fail! you can't modify a const.
}

void modify_nonstatic(const float &dummy)
{
    dummy = 1.5f; // fail! you can't modify a const.
}
于 2012-11-09T06:08:05.100 に答える