template <typename E>
class VecExpression{
public:
operator E&(){
return static_cast<E&>(*this);
}
operator E const&() const{
return static_cast<const E&>(*this);
}
};
有人可以向我解释一下这段代码吗?我从未见过这种运算符重载。它的返回类型是什么?它有任何参数吗?我能看到一个用法,或者可能会在源代码中调用它吗?
答案 0 :(得分:5)
VecExpression
是一个模板,因此运算符返回对类的模板类型E
的const或非const引用。它是一个隐式转换运算符。它不需要参数,只需使用VecExpression<E>
并允许在需要E
的上下文中使用它。
答案 1 :(得分:3)
这是转化运营商。
int i = (int)a;
将调用:: operator int()
答案 2 :(得分:3)
您可以将其视为演员。
它将强制转换VecExpression定义为E类型的对象(或对E类型对象的引用)。基本上,这允许您将VecExpression类型的对象传递给任何带有E类对象的函数,编译器将使用此运算符自动转换。
int stuff(int x)
{
return x + 1;
}
int code()
{
VecExpression<int> x;
return stuff(x); // cast x to E (which is an int).
}