运算符重载的这种风格是什么意思?class Bar {operator Foo(); }
class Foo {
Foo(int a) { ... }
};
class Bar {
operator Foo() { return Foo(25); }
};
运算符重载的这种风格是什么意思?class Bar {operator Foo(); }
class Foo {
Foo(int a) { ... }
};
class Bar {
operator Foo() { return Foo(25); }
};
即其中Bar
实例转换成Foo
隐式用户定义转换功能。
Bar bar;
Foo foo = bar; // bar implicitly converts into Foo.
这是因为如果你写的:
Foo foo = Foo(25);
如果你已经这样的转换功能,那么你可以调用这个:
void f(Foo foo); //a function which accepts Foo
f(bar); // bar implicitly converts into Foo.
所以这种隐转换可能不太合适,因为它可能会导致问题,并产生意想不到的结果。为了避免这种情况,可以使转换功能明确为(在C++ 11只):
//valid in C++11 only
class Bar {
explicit operator Foo() { return Foo(25); }
};
现在,这两个会给予错误:
Foo foo = bar; //error
f(bar); //error
但是,以下是允许:
Foo foo = static_cast<Foo>(bar); //Ok
f(static_cast<Foo>(bar)); //Ok
快速的手指,你已经得到了:) – Chad 2011-12-30 20:16:53
使用'在C++ 11中引入了“显式”用于运算符转换? AFAIR只有构造函数可以明确在c + + 03中,或许我没记错...... – 2011-12-30 20:24:12
@Als:你说得对。在C++ 03中,只有构造函数可以是显式的。我在答复中明确表达了这一点。 – Nawaz 2011-12-30 20:25:22