赋值运算符重载问题

突触 2021-02-06 12:33:53
我结构体里定义了个数组

想实现类似这样的操作

所以重载了=


可以在
line_Arry _first = {2,1,3,4,51,12,5,6};
这一句的时候出现了语法错误

如果直接用数组赋值也会出现类型不匹配
我想问的就是

1.是不是运算符重载 参数类型是不可以改变的呢?
2.如果1是正确的话,那为什么上面的operator = 可以编译成功呢?是编译器没有对这个进行检查吗?还是有其它用途?
3.这个操作的实现有没有可行的方法呢?
...全文
117 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
maguangzhi 2021-02-08
  • 打赏
  • 举报
回复
不用initial_list也可以实现,方法是定义line_array为类模板,参数为typename ... ARGS,然后定义line_array()构造函数和line_array(int s, ARGS)构造函数,通过sizeof... (ARGS)获得参数个数后基于指向s的指针去获得参数值。这两个构造函数相当于定义了任意个参数的构造函数line_arrary(...)。因此,可以接受任意个参数的对象初始化。关于如何获得各个参数的值,参见《C++程序设计精要教程》,这个方法可避免把initializer_list当"标准"类型使用。
熊猫呀 2021-02-06
  • 打赏
  • 举报
回复
引用 1 楼 真相重于对错 的回复:
{1,2,3}这不代表是数组,C++11后他是initializer_list,数组可以用它初始化,但他不能直接转为数组. c++11之前他叫初始化列表,但不是数组 如果你是用的支持c++11的编译器 可以 operator=(const initializer_list<int>& o) 方式初始化
学习了
真相重于对错 2021-02-06
  • 打赏
  • 举报
回复
{1,2,3}这不代表是数组,C++11后他是initializer_list,数组可以用它初始化,但他不能直接转为数组. c++11之前他叫初始化列表,但不是数组 如果你是用的支持c++11的编译器 可以 operator=(const initializer_list<int>& o) 方式初始化

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧