重载operator = returns void不可能是一个复制赋值运算符吗?

时间:2015-04-20 13:40:25

标签: c++ operator-overloading

参考http://en.cppreference.com/w/cpp/language/as_operator处的页面,复制赋值运算符,在编译器需要和可能时自动生成,返回自身类型的左值引用。

因此,当我在下面定义一个重载运算符时,

void operator=(T& t)

编译器是否仍有可能隐式定义默认的复制赋值运算符?

2 个答案:

答案 0 :(得分:2)

这是C ++ 11 [class.copy] / 17中的语言标准所指定的复制赋值运算符:

  

用户声明的复制赋值运算符X::operator=是类X的非静态非模板成员函数,其中只有一个类型XX&的参数, const X&volatile X&const volatile X&

返回类型不会影响它是否被视为复制赋值运算符。它只影响你可以用赋值表达式的结果做什么。

答案 1 :(得分:1)

C++ Reference(正如你自己发现的那样)声明:

  

如果没有为类类型(struct,class或union)提供用户定义的复制赋值运算符,则编译器将始终将one声明为该类的内联公共成员。

  

类T的复制赋值运算符是非模板非静态成员函数,其名称为operator =,它只取一个类型为T,T&,const T&,volatile T&或const volatile T& T的参数。

换句话说:只要声明自己的复制赋值运算符(采用T&参数),编译器就不会添加隐式运算符。

仍有问题为什么要返回void但是...(C ++编码指南建议返回对self的引用)