【发布时间】:2013-02-05 15:58:32
【问题描述】:
当我可以分配给“看起来”像构造函数的函数时,为什么我不能分配给构造函数?
例子:
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()时,它从不“构造函数”。不可能直接调用或引用构造函数。 -
您没有在代码中“分配给函数”,而是尝试分配给函数的返回值。
-
@LightnessRacesInOrbit--看看 boost::tuples::tie,他们非常有效地使用“分配给函数”。
标签: c++ constructor assignment-operator