6

和有什么区别

    const string& getName() const {return name;}

    string& getName() const {return name;}

const 在开头和结尾是什么意思?

4

4 回答 4

8

const函数签名末尾的 表示该方法是const成员函数,因此您的两个方法都是 const 成员函数。

const开头的意思是返回的都是 const 。

第一个示例是一个 const 方法,它返回对内部数据的 const 引用,因此是 const 正确的。

第二个是返回对内部数据的非常量引用的 const 方法。这不是 const 正确的,因为这意味着您可以修改 const 对象的数据。

对 const 方法的调用不能更改任何实例的数据(可变数据成员除外),只能调用其他 const 方法。

const 方法可以在 const 或非常量实例上调用,但非常量方法只能在非常量实例上调用。

于 2012-05-07T12:58:39.423 回答
6

一个返回const引用并且是const成员函数,另一个是const成员函数。

const string& getName() const {return name;}

返回的string不能修改,方法是const(见下文)。

string& getName() const {return name;}

该方法不能修改非mutable类成员。

于 2012-05-07T12:55:27.170 回答
1
const string& getName() const {return name;}

return const reference 意味着您在返回对它的引用后将无法使用该实例。

string& getName() const {return name;}

const 方法意味着该方法不会改变对象的状态,除了可变成员变量。也可以在 const 对象上调用此方法,例如:

class MyClass(){
public:
  void doSomethingElse()const;
  void notConstMethod();
};

void doSomething( const MyClass& obj ){
  obj.doSomethingElse();
  obj.notConstMethod(); //Error
}
于 2012-05-07T12:59:49.660 回答
1

我们const在函数的前缀中使用以确保从函数返回的任何内容都保持不变。

我们const在函数声明中使用后缀作为后缀,以确保函数不会对类的当前实例进行任何修改,即如果类的成员函数试图修改当前对象的属性值,那么编译器将抛出错误。

const 函数主要用于const 对象,以确保该函数不会试图修改当前对象数据。

于 2019-10-08T13:44:51.063 回答