1. ホーム
  2. c++

const *」を「*」の「this」引数として渡すと修飾語が消えることについて 疑問点

2022-02-13 05:29:31

class Rectangle
{
public:
	string what();
	friend ostream& operator <<(ostream& os,const Rectangle & object);
};
ostream& operator << (ostream& os,const Rectangle& object)
{
	os << object.what() <<": width = " << object.width << ", height = " << object.height << endl;
	return os;
}


最近、c++でコース設計の実験をしていて、設計要件は簡単だったのですが、非常に奇妙な問題に遭遇しました Rectangle::what()' の 'this' 引数に 'const Rectangle' を渡すと修飾語が破棄されるというエラーが出てコンパイルできないのですが、どうしたらいいですか?本の例を見比べても原因がわからなかったのですが、Webで同じ悩みを抱えている方を発見しました。 クリックするとリンクが開きます .

直訳すると、このような意味です。

const オブジェクトは、const でないメンバ関数を呼び出すことはできず、const メンバのみが使用可能です。メンバ関数がオブジェクトのメンバの値を変更していなくても、コンパイラはそのメンバ関数がオブジェクトを変更したとみなしてしまいます。この問題を解決するには、const オブジェクトが使用する必要があるメンバ関数を単純に const にします。


ご覧の通り、C++ではconstは素晴らしく、少し複雑なもので、私のC++の旅はまだ長い道のりなのです。