-2

怎么写是对的:

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

我的意思是它们之间是否有区别?

4

3 回答 3

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

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

const bool f() { return m_bool; }

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

在情况 2 中bool f() const;,返回值不保证它永远不会被更改,但函数本身保证它不会更改类内的任何数据成员,并且它不会调用任何未声明为 const 的成员函数。(有些例外情况适用

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 变量的信息可以在这里找到,更多关于 const 函数的信息可以在这里找到。

于 2013-02-09T15:21:29.260 回答
2
  1. 布尔常量 f(...);
  2. 布尔 f(...) 常量;
  3. const bool f(...) ;

1 和 3 是同一个东西,只是const和的顺序不同bool。这两个意味着返回的布尔值是一个常数。但是由于您的代码很可能会执行类似的操作bool b = myobject.f();,因此该变量bf()无论如何返回的值的副本,因此没有区别。

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

于 2013-02-09T15:20:07.763 回答
0

函数名前面是返回类型。constin a 类型适用于它左边的任何东西,除非它左边没有任何东西,在这种情况下它适用于右边的任何东西。所以第一个和第三个返回类型是const bools,第二个是非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返回 a 的非函数const bool——而选项 2 是不同的——它是一个const返回 a 的函数bool

于 2013-02-09T15:20:39.760 回答