遵循以下规则的原因是:“用户定义的转换函数模板不能具有推论的返回类型。”
struct S {
operator auto() const { return 10; } // OK
template<class T> operator auto() const { return 42; } // error
};
Run Code Online (Sandbox Code Playgroud)
xry*_*669 11
即使允许,在第二行中,也没有任何内容取决于模板。它不能被调用(T在这种情况下,目的是什么?)
如果要转换为用户定义的类型,则可以这样做:假设您具有:
struct S
{
template<typename T> operator T() { return T(42); }
};
Run Code Online (Sandbox Code Playgroud)
很明显,没有必要推论任何东西。您可以这样称呼:
S s;
int v = s;
float f = s;
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下,在上面的代码中使用auto而不是float会阻止编译器推断类型(是float?an int?an Orange?)。上面的句子只是说明了这一点。
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |