是否可能以及为什么要这样做?
class Foo;
class Bar;
......
Foo foo;
Bar bar = static_cast<Bar>(foo);
Run Code Online (Sandbox Code Playgroud)
通常,static_cast与数字类型和指针一起使用,但它是否可以使用用户定义的数据类型,即类?
Naw*_*waz 11
Bar bar = static_cast<Bar>(foo);
Run Code Online (Sandbox Code Playgroud)
这个演员会失败.Foo
并且Bar
是不兼容的类型,除非至少满足下列条件之一:
Foo
源自Bar
,或Bar
有一个构造函数Foo
,或者Foo
有一个用户定义的转换Bar
.这里更大的问题不是它是否会成功投射.更大和更实际的问题应该是:你想从这样的演员阵容中得到什么?你为什么要首先做这样的事情?该怎么办?我的意思是,如何Bar
从Foo
对象初始化对象?
将一种类型转换为另一种类型的合理方法是以下方式之一:
定义Foo
为:
class Foo : public Bar
{
//...
};
Run Code Online (Sandbox Code Playgroud)
或者定义Bar
为:
class Bar
{
public:
Bar(const Foo &foo); //define this constructor in Bar!
};
Run Code Online (Sandbox Code Playgroud)
或者提供转换功能Foo
:
class Foo
{
public:
operator Bar(); //provide a conversion function Foo to Bar!
};
Run Code Online (Sandbox Code Playgroud)
Arm*_*yan 11
这是规则:
static_cast<T>(e)
当且仅当以下变量定义有效时,表达式才有效
T x(e);
Run Code Online (Sandbox Code Playgroud)
x
一些发明的变量在哪里.
因此,通常,两个不相关的类型不能彼此强制转换.但是,如果一个类型是从另一个类型派生的,或者当一个类型为另一个类型定义转换函数,或者构造函数采用另一个类型的单个参数时 - 在这些情况下,static_cast将被很好地定义.
它有意义吗?例如,如果T定义一个构造函数的单一U和构造是explicit
然后static_cast<T>(e)
其中e是类型的ü将使完美的意义
归档时间: |
|
查看次数: |
3304 次 |
最近记录: |