違いは何ですか
const string& getName() const {return name;}
と
string& getName() const {return name;}
constは最初と最後でどういう意味ですか?
違いは何ですか
const string& getName() const {return name;}
と
string& getName() const {return name;}
constは最初と最後でどういう意味ですか?
const
関数シグネチャの最後にあるは、メソッドがconstメンバー関数であることを意味するため、両方のメソッドがconstメンバー関数です。
最初のconst
atは、返されるものがすべてconstであることを意味します。
最初の例は、内部データへのconst参照を返すconstメソッドであるため、const-correctです。
2つ目は、内部データへの非const参照を返すconstメソッドです。これは、constオブジェクトのデータを変更できることを意味するため、const-correctではありません。
constメソッドを呼び出すと、インスタンスのデータを変更することはできず(可変データメンバーを除く)、他のconstメソッドのみを呼び出すことができます。
constメソッドはconstまたはnon-constインスタンスで呼び出すことができますが、non-constメソッドはnon-constインスタンスでのみ呼び出すことができます。
const
1 つは参照を返すconst
メンバー関数で、もう 1 つはconst
メンバー関数です。
const string& getName() const {return name;}
返さstring
れたものは変更できず、メソッドは次のとおりですconst
(以下を参照)。
string& getName() const {return name;}
メソッドは非mutable
クラス メンバーを変更できません。
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
}