通常情况下,我们为类型
T
定义复制赋值运算符为T& operator=(const T&)
,移动赋值运算符为T& operator=(T&&)
。但是,当我们使用值参数而不是引用时会发生什么?
class T
{
public:
T& operator=(T t);
};
这应该使得T既能够进行复制赋值,又能够进行移动赋值。然而,我想知道的是,对于T这种情况,语言方面会有什么影响呢?
具体来说:
- 根据规范,这是否算作T的复制赋值运算符?
- 根据规范,这是否算作T的移动赋值运算符?
- T是否会有编译器生成的复制赋值运算符?
- T是否会有编译器生成的移动赋值运算符?
- 这将如何影响像std::is_move_assignable这样的特性类?