2010-11-14 61 views
4

我感到困惑的C++常量对象困惑常数C++对象的

当我们通过一个const对象的常量对象/引用意味着我们不能编辑属性值该对象的

,或者如果它不是什么平均值或在constant是“参考”对象”或‘属性’

也当我们返回一个常量对象

声明函数像

return_type function_name(parameters) const 
{ 

} 

const关键字在函数的末尾是它的语法吗?为什么如果我们返回const对象不应该是像如下

const return_type function_name(parameters) 
{ 

} 

很抱歉,如果它是一个noob问题;)

+0

阅读[this](http://www.parashift.com/c++-faq-lite/const-correctness.html)。它会帮助你。 – 2010-11-14 16:51:51

回答

6

这句法:

return_type function_name(parameters) const 
{ 

} 

表示function_name()可以被调用对于const类的一个实例。它对返回值的常量没有任何影响。

const return_type function_name(parameters) 
{ 

} 

...表明,从function_name()返回的值是常量(以及任何关于调用其成员函数的对象的常量性说。)

+0

感谢什么样的场景,我们应该使功能“不变”? – Sudantha 2010-11-14 16:27:54

+0

@Sundantha在您想要在常量实例上调用方法的场景中。从另一个角度来看,所有不改变对象状态的方法都应该是不变的。 – 2010-11-14 16:31:17

3

当我们已通过常量对象的常量对象/引用是否意味着我们无法编辑该对象的属性值?

是的。如果函数是const,那么该函数不能修改该类上的任何非可变字段。 (或者调用该类的任何其他非const方法)。

,为什么如果我们返回一个const对象不应该是像如下

因为返回类型可以是常量了。考虑以下几点:

#include <string> 

class MyClass 
{ 
    std::string data; 
public: 
    void SetData(const std::string& content) 
    { 
     data.assign(content); 
    } 
    const std::string& GetData() const //Note that the function is const, and so 
    {         //is the reference it returns. 
     return data; 
    } 
}; 

需要注意的是,我们正在返回一个const参考内部成员。如果我们返回非const引用,那么某人将能够使用该引用来修改该类的私有成员,在这种情况下为MyClass::data

+0

谢谢!这很有帮助! – Sudantha 2010-11-14 16:28:24

+0

+1以获得更好的解释 – 2010-11-14 16:33:16

0

实际上,添加的const会将该方法的第一个“隐藏”参数从ClassType * const this更改为const ClassType * const this