这种运算符重载的含义是什么意思?
class Foo {
Foo(int a) { ... }
};
class Bar {
operator Foo() { return Foo(25); }
};
答案 0 :(得分:10)
这是用户定义的转换函数,它隐式地将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
答案 1 :(得分:0)