return 模板中没有 return 类型声明的值,这是拼写错误吗?

return a value without return type declaration in template, is this a typo?

我正在观看 Walter E. Brown 的演讲 Modern Template Metaprogramming。 54:40 代码如下

template<class T, T v>
struct integral_constant{
  static constexpr T value = v;
   constexpr  operator T() const noexcept { return value; } // what does this mean?
   constexpr T operator T() const noexcept { return value; }
};

我的问题是这行是什么意思 constexpr operator T() const noexcept { return value; },为什么没有return类型却还是returning value?这是打错了吗?

第一个不是错字。该语法用于提供从 class 对象到另一种类型的转换。

return类型是T

有关详细信息,请参阅 http://en.cppreference.com/w/cpp/language/cast_operator

consexpr 限定符向编译器表明,如果调用成员函数的对象也是 constexpr 限定的,则可以在编译时确定成员函数的 return 值。

第二个不是合法的声明。

是的,第二个operator行是错误的,可以完全删除。

类型运算符,例如。 operator int()被执行
当对象被转换或隐式转换为类型时:

MyClass myObject;
int i = myObject; // here operator int() is used.

当然,operator int() 不得不 return int。没有必要也不允许为此类运算符编写特定的 return 类型。在你的情况下,它不是 floatint 或任何特定的东西,而是模板类型,但它是相同的想法。

抛开return 类型问题,第二行运算符再次定义了具有相同参数的相同运算符,不能有多个具有相同名称和参数的函数。

而在整个struct之后,少了一个分号。

修复这些问题后,编译:http://ideone.com/Hvrex5