写作是怎么回事:
bool const f(...);
or bool f(...) const ;
or const bool f(...) ;
我的意思是他们之间是否存在差异?
答案 0 :(得分:3)
const bool f();
说它返回一个不会改变其值的const bool 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。 (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和3是相同的,只是const
和bool
的不同顺序。这两个意味着返回的bool是一个常量。但由于您的代码最有可能执行类似bool b = myobject.f();
的操作,因此变量b
是f()
返回的值的副本,因此它没有任何区别。
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
。