6

違いは何ですか

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

    string& getName() const {return name;}

constは最初と最後でどういう意味ですか?

4

4 に答える 4

8

const関数シグネチャの最後にあるは、メソッドがconstメンバー関数であることを意味するため両方のメソッドがconstメンバー関数です。

最初のconstatは、返されるものがすべてconstであることを意味します。

最初の例は、内部データへのconst参照を返すconstメソッドであるため、const-correctです。

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

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

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

于 2012-05-07T12:58:39.423 に答える
6

const1 つは参照を返すconstメンバー関数で、もう 1 つはconstメンバー関数です。

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

返さstringれたものは変更できず、メソッドは次のとおりですconst(以下を参照)。

string& getName() const {return name;}

メソッドは非mutableクラス メンバーを変更できません。

于 2012-05-07T12:55:27.170 に答える
1
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
}
于 2012-05-07T12:59:49.660 に答える