考虑下面的代码。
struct any
{
template <typename T>
operator T &&() const;
template <typename T>
operator T &() const;
};
int main()
{
int a = any{};
}
此处,第二个转换运算符由过载分辨率选择。为什么?
据我了解,这两个运算符分别推导为operator int &&() const
和operator int &() const
。两者都在可行的功能集中。通读[over.match.best]并没有帮助我弄清楚为什么后者更好。
为什么后一种功能比前一种更好?
template <typename T> operator T &&() const &&; template <typename T> operator T &() const &;
让它调用第一个。