怎么写是对的:
bool const f(...);
or bool f(...) const ;
or const bool f(...) ;
我的意思是它们之间是否有区别?
const bool f();
说它返回一个永远不会改变其值的 const boolbool 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;
1 和 3 是同一个东西,只是const
和的顺序不同bool
。这两个意味着返回的布尔值是一个常数。但是由于您的代码很可能会执行类似的操作bool b = myobject.f();
,因此该变量b
是f()
无论如何返回的值的副本,因此没有区别。
2 使this
函数内部的指针f()
a const T *this
(其中 T 是您的类) - 意味着不允许修改类中的任何内容。这可能是您最初要求的。
函数名前面是返回类型。const
in a 类型适用于它左边的任何东西,除非它左边没有任何东西,在这种情况下它适用于右边的任何东西。所以第一个和第三个返回类型是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
返回 a 的非函数const bool
——而选项 2 是不同的——它是一个const
返回 a 的函数bool
。