のconstは、最初と最後にどういう意味constが異なる場所
const string& getName() const {return name;}
と
string& getName() const {return name;}
の違いは何であるにC++で何を意味するのでしょうか?
のconstは、最初と最後にどういう意味constが異なる場所
const string& getName() const {return name;}
と
string& getName() const {return name;}
の違いは何であるにC++で何を意味するのでしょうか?
ファンクションシグネチャの末尾にあるconst
は、メソッドがconstメンバ関数であることを意味します。したがって、どちらのメソッドもconstメンバ関数です。
冒頭のconst
は、返されるものは何でも意味します。
最初の例は、定数参照を内部データに返すconstメソッドであり、したがってconst-correctです。
第2は、内部データへの非const参照を返すconstメソッドです。これはconstオブジェクトのデータを変更できるという意味で、const-correctではありません。
constメソッドの呼び出しは、インスタンスのデータを変更することはできません(変更可能なデータメンバーを除く)。他のconstメソッドだけを呼び出すことができます。
constメソッドはconstインスタンスまたはnon-constインスタンスで呼び出すことができますが、非constメソッドは非constインスタンスに対してのみ呼び出すことができます。
答えに感謝します。 – Laura
は、const
の参照を返し、const
メンバ関数であり、もう1つはconst
メンバ関数です。
const string& getName() const {return name;}
(下記参照)が返さstring
は変更することができず、この方法は、const
あります。
string& getName() const {return name;}
方法は、非mutable
クラスメンバーを変更することはできません。
関連性:以来関数はスコープのいずれにもありません。メンバ関数ではなく関数のみです。 :)(ヘッダファイルにないと仮定) – phantasmagoria
@phantasmagoria非メンバconst関数を持つことはできないので、間違いなくクラススコープです。 –
@phantasmagoriaこれはおそらく、クラス宣言から直接コピーされた行でした。なぜそれが1つのライナーなのですか? – Joe
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
}
http://www.cprogramming.com/tutorial/const_correctness.htmlこれは[意味のconstの – Lucian
が重複する可能性を使用する方法についての良いチュートリアルですC++メソッド宣言の最後の "const"?](http://stackoverflow.com/questions/751681/meaning-of-const-last-in-ac-method-declaration) – juanchopanza
可能な複製C++で "const"を使用していますか?](http://stackoverflow.com/questions/455518/how-many-and-which-are-the-uses-of-const-in-c) – dmckee