当前位置: 首页 > 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.jsqmd.com/news/5646/

相关文章:

  • 曾记否 -- Words to be remembered 2025.9.28
  • 日常掉坑记录: 关于位操作
  • WPF XAML资源文件中的换行、回车、空格及Tab的转义
  • longchain4j 学习系列(2)-调用远程deepseek
  • 收汇核销简介
  • macOS 彻底卸载和重装 Node.js 指南
  • 2025最新国内过滤器品牌 TOP10 权威测评推荐厂家与选购指南
  • Python 将 HTML 转换为纯文本 TXT (HTML 文本提取) - 实践
  • 软件工程第一次作业——物品复活系统
  • 完整教程:【C++】string类的常见接口的使用
  • 【Android之路】界面和状态交互 - 详解
  • StatusStrip 状态栏控件的使用
  • unzip-6.0-21.el7.x86_64.rpm怎么安装?CentOS 7手动安装rpm包详细步骤
  • 2025过滤器厂家最新推荐TOP5排行榜:覆盖环保过滤器、精密过滤器、高效过滤器,帮企业找到适配优质厂商
  • 实用指南:零基础学AI大模型之LangChain
  • ubi文件系统的 制作 + 挂载
  • 一款开源免费、组件丰富的 WPF UI 控件库,提供了 100 多款常用控件!
  • 元推理用无限嵌套,取代目前弱ai的暴力无限试错
  • 小迪安全v2023学习笔记(九十讲)—— 小程序篇反编译外在主包分包调整泄露算法逆向未授权
  • 解题报告-序列(alis.*)
  • PostgreSQL patroni 高可用 4:HAProxy和Keepalived实现读写分离
  • Cloudbox工具箱!一款拥有100款工具的超级工具箱!Cloudbox工具箱教程(附下载)
  • java 语法基础课后作业
  • Lightroom使用教程!一文学会Lightroom使用教程!软件攻略(批量处理)
  • C++篇 String实现避坑指南:搞定构造,拷贝与析构,增删查改,流提取流插入与比对大小 一文全解 - 教程
  • 深入解析:基于机器学习的智能贫血分析预测系统
  • AT_agc026_c [AGC026C] String Coloring
  • 启发式合并 [PA 2014] Fiolki
  • 反转链表-leetcode
  • 完整教程:Nginx HTTPS 深入实战 配置、性能与排查全流程(Nginx https