当前位置: 首页 > news >正文

C#后遗症,掉了个坑,特此记录

String512 str1 = "123123"; 与 String512 str2; str2 = "456"; 有何区别?
之前用C#其实是不在意这个问题的,直到今天用CPP写了个String512类,才知道这里面原来还有说法..
首先, String512 str1 = "123123"; 这个语句已经有很多人掉进了坑里, 认为是"先有一个内容为123123的匿名对象生成,然后调用拷贝构造赋值给str1", 而事实是: 这个语句是直接调用了String512(const char*)这个有参构造, 没有任何临时对象生成!!如果没有String512(const char*),那么编译器会报错: 不存在const char[7]转换到String512的适当构造函数..
之所以有"生成了临时对象"的错觉,大概是跟
void foo(string a);
foo("123");
这种情景发生了混淆....
后面的两个语句呢?
String512 str2毫无疑问,只是简单的调用了String512的无参(默认)构造, 关键在于后一句: str2 = "456": 这个语句到底做了什么?
答案是这样的:
一) str2检查"="操作符有没有重载, 如果有, 那么就直接调用void operator=(const char*)
二) 如果"="操作符没有重载呢? 那么str2就会去调用有参构造String512(const char*).
三) 如果没有有参构造String512(const char*),又没有对"="进行重载呢? 于是编译器报错:没有与这些操作数匹配的"="运算符
http://www.hskmm.com/?act=detail&tid=20251

相关文章:

  • 曾记否 -- Words to be remembered 2025.9.28
  • 日常掉坑记录: 关于位操作
  • WPF XAML资源文件中的换行、回车、空格及Tab的转义
  • longchain4j 学习系列(2)-调用远程deepseek
  • 收汇核销简介
  • macOS 彻底卸载和重装 Node.js 指南
  • 题解:CF2023F Hills and Pits
  • 2025最新国内过滤器品牌 TOP10 权威测评推荐厂家与选购指南
  • Python 将 HTML 转换为纯文本 TXT (HTML 文本提取) - 实践
  • 0135_MVC 设计模式:让代码架构更清晰
  • 30天Python编程挑战 - 从零基础到全栈开发
  • 软件工程第一次作业——物品复活系统
  • StatusStrip 状态栏控件的使用
  • 2025过滤器厂家最新推荐TOP5排行榜:覆盖环保过滤器、精密过滤器、高效过滤器,帮企业找到适配优质厂商
  • 9.28
  • ubi文件系统的 制作 + 挂载
  • 一款开源免费、组件丰富的 WPF UI 控件库,提供了 100 多款常用控件!
  • 元推理用无限嵌套,取代目前弱ai的暴力无限试错
  • 解题报告-序列(alis.*)
  • Cloudbox工具箱!一款拥有100款工具的超级工具箱!Cloudbox工具箱教程(附下载)
  • java 语法基础课后作业
  • Lightroom使用教程!一文学会Lightroom使用教程!软件攻略(批量处理)
  • C++篇 String实现避坑指南:搞定构造,拷贝与析构,增删查改,流提取流插入与比对大小 一文全解 - 教程
  • AT_agc026_c [AGC026C] String Coloring
  • 启发式合并 [PA 2014] Fiolki
  • 反转链表-leetcode
  • 第45篇:AI+交通:自动驾驶、智能交通管理与出行优化 - 实践
  • three角度处理:1.角度、弧度归一(0,2PI),2.两个角度之间的最小夹角
  • 软件工程技术第一次作业
  • 在macos下Termius无法连接局域网主机的一个经常出现但又很难排查的问题