auto关键字用来推导类型的,那么作为成员函数返回值类型推导,他是根据return来推导的,这里有一个关键点,auto作为成员函数的返回值,或者参数时,那么这个成员函数就是一个模板函数,按照模板规则,声明与定义只能在一个翻译单元内编写。
虽然没有写template修饰的函数,但是只要使用了auto作为函数的一部分,那么编译器就会隐式的将这个函数作为一个模板函数来定义。
简单的示例:
class MyClass {
public:
auto fun();
};
// 不能分文件定义
auto MyClass::fun() {
return 1;
}
静态成员函数也是一个模板
class MyClass2 {
public:
static auto fun();
};
// 静态成员函数具有全局特性,所以要inline内联,防止重定义
inline auto MyClass2::fun() {
return 1;
}