爲什麼我不能分配給構造函數,何時可以分配給一個看起來像構造函數的函數?賦值給構造函數? (如元組層)
例子:
struct Bar {
Bar() : b_(false) {}
Bar(bool b) : b_(b) {}
};
struct Foo {
Foo(Bar const & bar) : bar_(bar) {}
Foo operator=(Foo const & f) { return Foo(f.bar_); }
const Bar & bar_;
}
Foo bool_to_foo(bool b) { return Foo(Bar(b)); }
Foo MakeFoo(Bar const & bar) { return Foo(bar); }
爲什麼這個工作:
Bar bar;
MakeFoo(bar) = bool_to_foo(true);
當這不起作用?
Bar bar;
Foo(bar) = bool_to_foo(true); // Error: 'bar': redefinition; different basic types
MakeFoo(。)和Foo()具有相同的簽名,和相同的功能。
構造函數有什麼特別之處?
你永遠不能「分配給一個功能」。雖然你可以分配給一個函數對象! –
噢,當你在你的代碼的表達式中看到'Foo()'時,它就是_never_「構造函數」。直接調用或引用構造函數是不可能的。 –
您不會在代碼中「分配給函數」,而是嘗試分配函數的返回值。 – PlasmaHH