代入演算子が void を返すことができるのはなぜですか? そして、この場合、割り当てチェーンが機能するのはなぜですか? コードを見てください。私が何について話しているのかは非常に明確です。
コード:
struct Foo
{
std::string str;
Foo(const std::string& _str)
: str(_str)
{
}
Foo& operator=(const Foo& _foo)
{
str = _foo.str;
//return *this; /* NO RETURN! */
}
};
int main()
{
Foo f1("1");
Foo f2("2");
Foo f3("3");
f1 = f2 = f3 = Foo("4");
std::cout << "f1: " << f1.str << std::endl;
std::cout << "f2: " << f2.str << std::endl;
std::cout << "f3: " << f3.str << std::endl;
return 0;
}
質問:
- なぜこれが合法なのですか?(なぜそれはまったくコンパイルされますか)
- なぜそれが機能するのですか?
私は多くの場所で「代入演算子は * thisを返す必要があるため、代入チェーンを使用できるようにする必要があります」と読んだことがありますが、これは完全に理にかなっていますが、なぜ上記が機能するのですか?
試してみてください:
上記のコードを使用したオンライン C++ ワークスペース