是否可以重载*static_cast*运算符?

Mal*_*rba 6 c++ casting

我已经定义了一个A类,实际属性是无关紧要的.是否可以定义static_cast<class T>(int)运算符的特化以从整数转换为A类?

到目前为止,我一直在通过定义转换函数来做到这一点,例如A convert(int).但我宁愿使用static_cast与其他转换的一致性.

可能吗?
我也想避免隐式转换,这就是为什么我不是通过A的构造函数来做这件事.

Jon*_*Jon 10

static_cast是一个关键字,所以没有什么可以重载或覆盖那里.如果要提供控制整数转换为class A实例的代码,请编写适当的表单构造函数A::A(int).

更新:如果要避免隐式转换,可以创建此构造函数explicit.不知怎的,我没有完全阅读问题的最后一句,道歉.

  • `new`和`delete`是运算符,一个微妙的区别. (3认同)

小智 8

如果您只想避免隐式转换.为什么不使用显式关键字?


Mar*_*k B 6

static_cast是一个语言关键字,你无法做任何改变.但是,您可以使用显式转换构造函数实现您的目标:

class Foo
{
public:
    explicit Foo(int bar) { }  // Can't be called implicitly, CAN be invoked with `static_cast`.
};
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为语言static_cast根据对象构造定义了行为,并在适当时调用转换.