cac*_*hed 2 c++ constructor operator-overloading
这种运算符重载的含义是什么意思?
class Foo {
Foo(int a) { ... }
};
class Bar {
operator Foo() { return Foo(25); }
};
Run Code Online (Sandbox Code Playgroud)
Naw*_*waz 10
这是用户定义的转换函数,它将一个实例转换Bar为Foo隐式.
Bar bar;
Foo foo = bar; // bar implicitly converts into Foo.
Run Code Online (Sandbox Code Playgroud)
好像你写的那样:
Foo foo = Foo(25);
Run Code Online (Sandbox Code Playgroud)
如果你有这样的转换功能,那么你可以这样称呼:
void f(Foo foo); //a function which accepts Foo
f(bar); // bar implicitly converts into Foo.
Run Code Online (Sandbox Code Playgroud)
所以这种隐式转换有时可能不合适,因为它可能会导致问题,从而产生意想不到的结果.为避免这种情况,您可以将转换函数显式化为(仅在C++ 11中):
//valid in C++11 only
class Bar {
explicit operator Foo() { return Foo(25); }
};
Run Code Online (Sandbox Code Playgroud)
现在这两个都会给出错误:
Foo foo = bar; //error
f(bar); //error
Run Code Online (Sandbox Code Playgroud)
但是,允许以下内容:
Foo foo = static_cast<Foo>(bar); //Ok
f(static_cast<Foo>(bar)); //Ok
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
579 次 |
| 最近记录: |