我怎样才能使类的方法成为const

时间:2013-02-09 15:16:09

标签: c++

写作是怎么回事:

bool const f(...);
or bool f(...) const ;
or const bool f(...)  ;

我的意思是他们之间是否存在差异?

3 个答案:

答案 0 :(得分:3)

  1. const bool f();说它返回一个不会改变其值的const bool
  2. bool f() const;表示f是一个const函数,不会修改类
  3. 中的任何变量

    在情况1 const bool f();中,返回的bool必须声明为const并在声明或类的构造函数中初始化。

    const bool f() { return m_bool; }
    

    其中m_bool声明为const bool m_bool = false;

    在第2种情况bool f() const;中,返回值并不保证它永远不会被更改,但函数本身保证它不会更改类中的任何数据成员,也不会调用任何成员函数那个没有被声明为const。 (Some exceptions apply

    bool f() const { return m_bool; } // valid
    bool f() const { m_bool = false; return m_bool; } // invalid, m_bool cannot be changed from a const function.
    

    其中m_bool可以声明为const bool m_bool = false;bool m_bool;

    <小时/> 有关const变量的更多信息可以在here找到,有关const函数的更多信息可以在here找到。

答案 1 :(得分:2)

  1. bool const f(...);
  2. bool f(...)const;
  3. const bool f(...);
  4. 1和3是相同的,只是constbool的不同顺序。这两个意味着返回的bool是一个常量。但由于您的代码最有可能执行类似bool b = myobject.f();的操作,因此变量bf()返回的值的副本,因此它没有任何区别。

    2使函数this内的f()指针成为const T *this(其中T是您的类) - 意味着不允许修改类中的任何内容。这可能是你首先要求的。

答案 2 :(得分:0)

函数名称之前的内容是返回类型。类型中的const适用于其左侧的任何内容,除非其左侧没有任何内容,在这种情况下它适用于右侧的任何内容。因此,第一个和第三个返回类型是const bool s,第二个是非const bool。拥有const返回类型意味着无法修改返回的值。

在函数参数列表后面加const使函数成为const函数。这仅适用于成员函数(即在类中声明)。只能在const对象上调用const成员函数。因此,如果您的班级foo具有非const成员函数f,则您将无法执行此操作:

const foo a_foo;
a_foo.f(); // Error because a_foo is const but f is not a const member function

因此选项1和3都是相同的 - 它们是返回const的非const bool函数 - 而选项2是不同的 - 它是一个const函数返回一个bool