c++ - 为什么自定义转换函数模板不能有推导的返回类型?

标签 c++

以下规则的原因是什么,“用户定义的转换函数模板不能具有推导的返回类型。”

struct S {
  operator auto() const { return 10; } // OK
  template<class T> operator auto() const { return 42; } // error
};

最佳答案

即使允许,在第二行中,也没有任何依赖于模板的内容。 它不能被调用(在那种情况下 T 的目的是什么?)

如果你想转换为用户定义的类型,那么你会这样做: 假设您有:

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

这很清楚,不需要推论什么。 你会这样调用它:

S s;
int v = s;
float f = s;

请注意,在那种情况下,在上面的代码中使用 auto 而不是 float 会阻止编译器推断类型(它是 float ? int ? Orange ?)。上面的句子简单地解释了这一点。

关于c++ - 为什么自定义转换函数模板不能有推导的返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57889615/

相关文章:

c++ - 弃用 static 关键字...不再?

c++ - VC2010中使用Char数组显示字符串运行时报错

c++ - 在 boost::asio 中发送/接收结构

c++ - 为什么 Visual C++ 编译器会在这里调用错误的重载?

c++ - 确保始终捕获异常

c++ - COM 初始化和清理是否适合函数级粒度?

c# - 使用多个处理器包装非托管代码

c++ - 在 C++ 中,如何在基函数中访问派生类的成员? (这甚至是正确的做法吗?)

c++ - 为什么不允许使用 `make_unique<T[N]>`?

c++ - 使用类中的枚举 (C++)