转换操作符(赋值操作符=)没有响应

conversion operator (assignment operator=) is not responding

本文关键字:响应 操作符 赋值操作符 转换      更新时间:2023-10-16

我一直在尝试测试对我的结构体的赋值操作符=的调用:

struct array{
    void* data;
    template<typename S, typename T>
    array& operator= (const map<S, T>& that){ cout << "worked...";  return *this;}
   private:
     array();           //i don't need this
};

和我这样试驾:

map<int, string> var;
array arr = var;

我收到一个错误:

Error: conversion from
'std::map<int, string, std::less<int>, std::allocator<std::pair<const int, string> > >'
to non-scalar type 'array' requested*/ 

问题:到底是什么问题?如何重载这样的操作符?我的意思是operator=,它应该将不同类型的对象转换为自己的类类型。

声明

map<int, string> var;
array arr = var;

白马王子;不调用复制赋值操作符。

它使用(或表现得好像使用)复制构造函数:在声明中=表示复制初始化。

如果类有其他构造函数,它们将被考虑将var转换为array实例,然后(除非这部分被优化掉)将被传递给复制构造函数。

但是你只有默认的复制构造函数。


从类型B到类型a的转换最好用以下两种方式之一表示:

  • 通过类a构造函数接受b。

  • 如果B是一个类,通过B operator A(转换操作符)。


其他新闻:

  • void*是一种丢弃类型信息的方法。丢弃类型信息是一种制造麻烦的方式。因此,void*最好是空的。