在这段代码中取自http://drdobbs.com/cpp/184403774:
template <class L, class R>
class MinResult {
L& lhs_;
R& rhs_;
public:
operator L&() { return lhs_ < rhs_ ? lhs_ : rhs_; } // <----
operator R&() { return lhs_ < rhs_ ? lhs_ : rhs_; } // <----
MinResult(L& lhs, R& rhs) : lhs_(lhs), rhs_(rhs) {}
};
以上代码在箭头指向的行上尝试的是什么?
我是C ++的初学者,我知道我们可以通过定义来覆盖/定义operator()
。
但是不应该像这样定义
L& operator() { return lhs_ < rhs_ ? lhs_ : rhs_; }
我确信这是一些不同的语法,因为operator()
应该是一个单词。此外,您无法使用不同的返回类型定义其中两个。
答案 0 :(得分:7)
这不是类型转换操作符。
您可以定义
operator type() const
作为允许转换为type
的运算符。例如
class date {
public:
operator time_t() const; // convert to time_t
};
operator()
有不同的目的,它允许将该类用作“函数”,而这不是这里的情况