是否可以定义基本类型的隐式转换行为? C ++

时间:2012-01-06 19:03:36

标签: c++ casting

用户可以定义原语在基元之间的转换方式吗?或者他们如何将转换为用户定义的类型? (“隐式铸造构造函数”?yikes)

这是一个假设的问题,很难想象一个用法,但也许人们可能想要影响投注如何投入布尔。

3 个答案:

答案 0 :(得分:7)

您无法更改内置类型的行为方式。你不能像这样打破这种语言,就像你不能为那些做其他事情的operator+重载新int一样。

语言需要能够做出某些基本保证,以便可以编写可以依赖基本行为的库!

您可以通过提供可用一个参数调用的构造函数将任何类型的转换为用户定义的类型,例如:

struct Foo
{
    Foo(T const &);
    // ...
};

现在你可以说,T x; Foo y = x;等。

您也可以反过来提供来自类的转换:

struct Foo
{
    operator S() const;
    // ...
};

现在你也可以说S s = y;

答案 1 :(得分:2)

您无法更改基元投射到其他基元的方式 您可以通过提供 conversion constructor 来定义如何将用户定义的类型强制转换为基本类型/任何类型。

答案 2 :(得分:1)

  

用户可以定义基元之间基元的投射方式吗?

没有。这种语言不可变。

  

或者他们如何投射到用户定义的类型? (“隐式铸造构造函数”?yikes)

是:

struct X {
    X() {}
    X(int a) {} // implicit cast
};

X x;
x = 10; // int implicitly cast to X