2012-05-07 66 views
3

是什么是什么意思常量在开始和结束时是什么意思常量在C++中在不同的地方

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

string& getName() const {return name;} 

之间的区别?

+0

http://www.cprogramming.com/tutorial/const_correctness.html这是如何使用的常量 – Lucian

+0

可能重复的一个很好的教程[含义“const”最后在一个C++方法声明?](http://stackoverflow.com/questions/751681/meaning-of-const-last-in-ac-method-declaration) – juanchopanza

+0

可能重复的[多少和哪在C++中使用“const”是什么意思?](http://stackoverflow.com/questions/455518/how-many-and-which-are-the-uses-of-const-in-c) – dmckee

回答

4

const在函数签名的末尾意味着方法是一个const成员函数,所以你的方法都是const成员函数。

const在开始意味着无论返回的是const。

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

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

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

const的方法可以叫上const或非const实例,但非const方法只能在非const的情况下调用。

+1

感谢您的回答。 – Laura

5

一个返回const参考,并且是const成员函数,另一个是const成员函数。

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

返回string不能被修改,并且该方法是const(见下文)。

string& getName() const {return name;} 

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

+0

无关:since该函数不在任何范围内,它不是一个成员函数,而只是一个函数的权利? :)(假设它不在头文件中) – phantasmagoria

+1

@phantasmagoria你不能有一个非成员const函数,所以它肯定在类范围内。 –

+1

@phantasmagoria这很可能是直接从类声明中复制的行。这就是为什么它是一个班轮。 – Joe

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

返回const引用意味着你将不能够实例返回对它的引用后。

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 
} 
+0

伙计们我无法插入代码标签,根本没有选项。发生了什么? – AlexTheo

+0

@jrok谢谢:)。 – AlexTheo