Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重载运算符=模板类内部 模板类A { ... ClassA&运算符=(const ClassA&); ... }; //案例一: 模板 ClassA&ClassA::运算符=(常量ClassA&rhs) { ... } //案例二: 模板 ClassA&ClassA::运算符=(常量ClassA&rhs) { ... }_C++_Templates - Fatal编程技术网

C++ 重载运算符=模板类内部 模板类A { ... ClassA&运算符=(const ClassA&); ... }; //案例一: 模板 ClassA&ClassA::运算符=(常量ClassA&rhs) { ... } //案例二: 模板 ClassA&ClassA::运算符=(常量ClassA&rhs) { ... }

C++ 重载运算符=模板类内部 模板类A { ... ClassA&运算符=(const ClassA&); ... }; //案例一: 模板 ClassA&ClassA::运算符=(常量ClassA&rhs) { ... } //案例二: 模板 ClassA&ClassA::运算符=(常量ClassA&rhs) { ... },c++,templates,C++,Templates,我想案例一是正确的 问题>为什么我们不必在函数参数列表中使用ClassA,例如在案例2中?当它在函数参数范围内(但不在返回类型中)时,它是隐含的。另请参见使用嵌套类作为参数类型。如您所见,两种版本都适用 一旦我们通过了ClassA::部分ClassA&ClassA::operator=(const ClassA&rhs)它的行为就好像我们在类中一样。例如,运算符可以访问类的所有成员 您必须为返回值指定全名,因为此时我们仍然不知道这是一个成员函数(或运算符)。我被告知“我们必须为类模板的名称指定模

我想案例一是正确的


问题>为什么我们不必在函数参数列表中使用
ClassA
,例如在案例2中?

当它在函数参数范围内(但不在返回类型中)时,它是隐含的。另请参见使用嵌套类作为参数类型。

如您所见,两种版本都适用

一旦我们通过了
ClassA::
部分
ClassA&ClassA::operator=(const ClassA&rhs)
它的行为就好像我们在类中一样。例如,运算符可以访问类的所有成员


您必须为返回值指定全名,因为此时我们仍然不知道这是一个成员函数(或运算符)。

我被告知“我们必须为类模板的名称指定模板参数,但在类本身的范围内除外。这里的函数参数不在classA的范围内,所以我认为我们必须使用案例二而不是案例一。“@iammilind:你投票赞成是因为隐含性吗?@phresnel.这是一个简短的:)。+1代表一个好问题。“因为它是隐含的”,这就是我认为的答案。@iammilind:啊,我明白了:D
template<typename T> ClassA
{
    ...
    ClassA& operator=(const ClassA&);

    ...
};

// case one:
template<typename T>
ClassA<T>& ClassA<T>::operator=(const ClassA &rhs)
{ ... }

// case two:
template<typename T>
ClassA<T>& ClassA<T>::operator=(const ClassA<T> &rhs)
{ ... }