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 类型。在你的情况下,它不是 float
的 int
或任何特定的东西,而是模板类型,但它是相同的想法。
抛开return 类型问题,第二行运算符再次定义了具有相同参数的相同运算符,不能有多个具有相同名称和参数的函数。
而在整个struct
之后,少了一个分号。
修复这些问题后,编译:http://ideone.com/Hvrex5
我正在观看 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 类型。在你的情况下,它不是 float
的 int
或任何特定的东西,而是模板类型,但它是相同的想法。
抛开return 类型问题,第二行运算符再次定义了具有相同参数的相同运算符,不能有多个具有相同名称和参数的函数。
而在整个struct
之后,少了一个分号。
修复这些问题后,编译:http://ideone.com/Hvrex5