当我可以分配“看起来”像构造函数的函数时,为什么不能分配给构造函数?
例:
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(bar) = bool_to_foo(true);
不按照您的想法去做。它没有声明使用
bar
初始化的临时对象。它实际上所做的是声明一个类型为
bar
的名为Foo
的对象,并使用值bool_to_foo(true)
对其进行初始化。从这个意义上讲,它完全等同于:
Foo bar = bool_to_foo(true);
由于在作用域中已经有一个名为
bar
的对象,因此需要重新定义。如果您仍然想做您想做的事情,可以尝试:
Foo((0,bar)) = bool_to_foo(true);
但是,由于这既丑陋又令人困惑,因此我将不作进一步描述。
关于c++ - 分配给构造函数? (像元组层),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14711588/