2013-02-09 27 views

回答

2
  1. bool const f(...);
  2. bool f(...)const;
  3. const bool f(...);

1和3是相同的东西,只是constbool的顺序不同。这两个意味着返回的布尔是一个常量。但是由于你的代码最有可能做类似bool b = myobject.f();,变量b是由f()返回的值的副本,所以它没有区别。

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

0

该函数的名称之前是什么是返回类型。一个类型中的const适用于它的左边的任何内容,除非它的左边没有任何内容,在这种情况下,它适用于右边的任何内容。所以第一个和第三个返回类型是constbool s,第二个返回类型是非constbool。拥有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

3
  1. const bool f();说,它返回该永远不会改变其值
  2. 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;


约常量变量的更多信息可以发现 here和约const函数的更多信息可以发现 here

+0

-1:'bool f()const'并不意味着函数不会修改类中的任何变量。 – qdii 2013-02-09 15:29:17

+0

@qdii你错了。 '常量成员函数不能修改任何数据成员或调用任何不是常量的成员函数。[source](http://msdn.microsoft.com/zh-cn/library/6ke686zh.aspx) – 2013-02-09 15:42:55

+0

它可以修改'mutable'数据成员,如果在'this'上使用'const-cast',它也可以修改它想要的任何内容。所以,不,写'const'不能保证没有成员会被修改。 – qdii 2013-02-09 15:48:22