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

Is it possible to define implicit casting behavior of primitive types? C++

本文关键字:转换 换行 C++ 定义 类型 是否      更新时间:2023-10-16

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

这是一个假设性的问题,很难想象它的用法,但也许有人想影响int如何转换为bool。

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

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

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

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

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

你也可以做相反的事情,并提供你的类的转换:

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

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

不能更改基元转换为其他基元的方式
通过提供转换构造函数,可以定义如何将用户定义的类型强制转换为基元类型/任何类型。

用户可以定义基元如何在基元之间转换吗?

没有。这种语言是不可变的。

或者它们如何转换为用户定义的类型?("隐式铸造构造函数"?yikes)

是:

struct X {
    X() {}
    X(int a) {} // implicit cast
};
X x;
x = 10; // int implicitly cast to X