2012-05-07 45 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