如何正确书写:我怎样才能使一个类的方法是const
bool const f(...);
or bool f(...) const ;
or const bool f(...) ;
我的意思是,如果它们之间有区别吗?
如何正确书写:我怎样才能使一个类的方法是const
bool const f(...);
or bool f(...) const ;
or const bool f(...) ;
我的意思是,如果它们之间有区别吗?
1和3是相同的东西,只是const
和bool
的顺序不同。这两个意味着返回的布尔是一个常量。但是由于你的代码最有可能做类似bool b = myobject.f();
,变量b
是由f()
返回的值的副本,所以它没有区别。
2使this
指针内的函数f()
a const T *this
(其中T是你的类) - 意味着该类中的任何内容都不允许被修改。这可能是你首先要求的。
该函数的名称之前是什么是返回类型。一个类型中的const
适用于它的左边的任何内容,除非它的左边没有任何内容,在这种情况下,它适用于右边的任何内容。所以第一个和第三个返回类型是const
bool
s,第二个返回类型是非const
bool
。拥有const
返回类型意味着返回的值不能被修改。
在函数参数列表使函数为const
函数后具有const
。这只适用于成员函数(即在类中声明)。 A 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
。
const bool f();
说,它返回该永远不会改变其值bool f() const;
说F是不会修改任何变量在类如果1对const函数的常量布尔,const bool f();
,返回的布尔必须声明为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;
-1:'bool f()const'并不意味着函数不会修改类中的任何变量。 – qdii 2013-02-09 15:29:17
@qdii你错了。 '常量成员函数不能修改任何数据成员或调用任何不是常量的成员函数。[source](http://msdn.microsoft.com/zh-cn/library/6ke686zh.aspx) – 2013-02-09 15:42:55
它可以修改'mutable'数据成员,如果在'this'上使用'const-cast',它也可以修改它想要的任何内容。所以,不,写'const'不能保证没有成员会被修改。 – qdii 2013-02-09 15:48:22
第二个。 – 2013-02-09 15:16:48