对常量对象C ++感到困惑

时间:2010-11-14 16:10:44

标签: c++ visual-c++

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

当我们传递const对象的常量对象/引用时,这是否意味着我们无法编辑该对象的属性值

或者如果它不是平均值或 constant 那就是'引用'对象'或'属性'

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

声明像

这样的功能
return_type function_name(parameters) const
{

}

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

const return_type function_name(parameters) 
{

}

对不起,如果它是一个noob问题;)

3 个答案:

答案 0 :(得分:6)

此语法:

return_type function_name(parameters) const
{

}

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

const return_type function_name(parameters)
{

}

...表示从function_name()返回的值是const(并且没有说明调用其成员函数的对象的常量。)

答案 1 :(得分:3)

  

当我们传递const对象的常量对象/引用时,这是否意味着我们无法编辑该对象的属性值?

是。如果函数是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

答案 2 :(得分:0)

有效地,添加的const会将方法的第一个“隐藏”参数从ClassType * const this更改为const ClassType * const this