2012-05-07 12 views
3

のconstは、最初と最後にどういう意味constが異なる場所

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

string& getName() const {return name;} 

の違いは何であるにC++で何を意味するのでしょうか?

+0

http://www.cprogramming.com/tutorial/const_correctness.htmlこれは[意味のconstの – Lucian

+0

が重複する可能性を使用する方法についての良いチュートリアルですC++メソッド宣言の最後の "const"?](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-correctです。

第2は、内部データへの非const参照を返すconstメソッドです。これはconstオブジェクトのデータを変更できるという意味で、const-correctではありません。

constメソッドの呼び出しは、インスタンスのデータを変更することはできません(変更可能なデータメンバーを除く)。他のconstメソッドだけを呼び出すことができます。

constメソッドはconstインスタンスまたはnon-constインスタンスで呼び出すことができますが、非constメソッドは非constインスタンスに対してのみ呼び出すことができます。

+1

答えに感謝します。 – Laura

5

は、constの参照を返し、constメンバ関数であり、もう1つはconstメンバ関数です。

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

(下記参照)が返さstringは変更することができず、この方法は、constあります。

string& getName() const {return name;} 

方法は、非mutableクラスメンバーを変更することはできません。

+0

関連性:以来関数はスコープのいずれにもありません。メンバ関数ではなく関数のみです。 :)(ヘッダファイルにないと仮定) – phantasmagoria

+1

@phantasmagoria非メンバconst関数を持つことはできないので、間違いなくクラススコープです。 –

+1

@phantasmagoriaこれはおそらく、クラス宣言から直接コピーされた行でした。なぜそれが1つのライナーなのですか? – 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

Guysコードタグを挿入できず、オプションもありません。どうしたの? – AlexTheo

+0

@jrokありがとう:)。 – AlexTheo

関連する問題