それはばかげているように聞こえるかもしれません.C++prime 5th edition P258では、次のように書かれています:
既定では、this の型はクラス型の非 const バージョンへの const ポインターです。たとえば、既定では、Sales_data メンバー関数内の this の型は Sales_data *const です。
this* は const ポインターであることを理解できます。これは、初期化されたオブジェクトが指すオブジェクトは変更できないことを意味しますが、次のように述べています。
これは暗黙的ですが、通常の初期化規則に従います。つまり、(デフォルトでは) これを const オブジェクトにバインドすることはできません。
しかし、私は次のコードを書きましたが、それでも問題なくコンパイルされました:
class Test{
public:
Test() = default;
Test(const string &s): teststr(" ") {};
Test(int a) : testint(a) {};
Test(const string &s, int a): teststr(s), testint(a) {};
string getstr() const { return teststr; };
int getint() { return testint; }; //there is no const here
private:
string teststr;
int testint = 0;
};
int main(){
Test a("abc",2);
cout << a.getint() << " ";
cout << a.getstr() << endl;
cout << endl;
return 0;
}
私の質問は次のとおりです。「const」があるかどうかに関係なく、コンパイラがそれを正常にコンパイルできる場合、なぜそれが重要なのですか? そして、本は次のように述べています。
結局のところ、isbn の本体は this が指すオブジェクトを変更しないので、これが const へのポインターであれば、関数はより柔軟になります。
柔軟性とは何ですか?いくつかの例を見せていただけますか?