0

我想知道以下代码有什么问题:

template<typename T, typename U = T> 
    operator U() 
    {
        return U();
    }

它以 失败error: no matching function for call to 'Test1::Test1(Test&)',而以下代码的转换成功:

template<typename T> 
    operator T() 
    {
        return T();
    }

完整代码:

https://ideone.com/yWVtgR

class Test
{
    public:
        template<typename T, typename U = T> 
        operator U() 
        {
            return U();
        }
};
class Test1{};

int main() {
    Test t;
    Test1 t1 = (Test1)t;

    return 0;
}

https://ideone.com/XcRkTn

class Test
{
    public:
        template<typename T> 
        operator T() 
        {
            return T();
        }
};
class Test1{};

int main() {
    Test t;
    Test1 t1 = (Test1)t;

    return 0;
}
4

1 回答 1

2

你用这个让编译器太难了

template<typename T, typename U = T> 
operator U() 
{
    return U();
}

代码显示“U 与 T 的类型相同”。编译器会问“T 是什么?”。T在您的代码中的任何地方都没有使用,因此编译器无法推断它。

typename U = T只能以一种方式工作,即定义U何时T已知。

于 2016-01-17T11:28:30.257 回答