爲什麼賦值運算符被允許返回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;
}
問題:
- 爲什麼這是合法的嗎? (爲什麼會編譯)
- 它爲什麼會起作用?
我讀過很多地方「賦值運算符應返回* 這,這樣你可以有任務鏈」,這完全是有道理的,但後來爲什麼上面的工作?
試試看:
online c++ workspace with the code from above
它返回'美孚&','不void'。 – vines 2013-03-18 10:35:01