当我可以分配给“看起来”像构造函数的函数时,为什么我不能分配给构造函数?
例子:
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(.) 具有相同的签名和相同的功能。
构造函数有什么特别之处?