如果函数定义在 class 函数体内,我是否需要在 return 类型的成员函数中指定类型名称?

Do I need to specify typename in the return type of member function if the function is defined inside the body of the class?

考虑下面的例子:

template <typename T>
class SomeClass {
    // rest of the definition ...

    SomeClass<T>& function1() {
        // ...
        return *this;
    }

    SomeClass& function2() {
        // ...
        return *this;
    }

}

以上两个函数的return值有区别吗?如果不是,应该首选哪一个?

function1function2没有区别。在 SomeClass 的定义中键入不带模板参数的 SomeClass 是使用 injected-class-name:

的一个实例

The injected-class-name is the name of a class within the scope of said class.

In a class template, the injected-class-name can be used either as a template name that refers to the current template, or as a class name that refers to the current instantiation.

是否使用一个而不是另一个是主观的,但是注入的 class 名称更易于维护,因为如果您更改 [=12] 的模板参数的数量,则不必手动更改它=].