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

【More Effective C++】条款19:了解临时对象的来源

临时对象:没有命名,不会出现在源代码中

  • 帮助隐式类型转换成功而创建的对象
    • 编译器创建一个类型为string的临时对象,以buffer作为参数,调用string的构造函数;
    • str绑定到了这个临时对象上
    • 函数返回时,这个临时对象会自动销毁
    • 这种情况只会出现在以值传递或者以const引用传递的函数里
      • 非const引用不会出现转换,因为他不能保证临时对象不被改变
  • 解决方案:【More Effective C++】条款21:用重载技术避免隐式类型转换-CSDN博客
size_t countChar(const string& str, char ch);
void uppercasify(std::string& str);
#define MAX_STRING_LEN 10
int main() {char buffer[MAX_STRING_LEN];char c;std::cin >> c >> std::setw(MAX_STRING_LEN) >> buffer;std::cout << countChar(buffer, c);uppercasify(buffer); // 编译失败// error: cannot bind non-const lvalue reference of type ‘std::string&’ to an rvalue of type ‘std::string’return 0;
}
  •  函数必须返回一个对象时候
    • 会创建一个临时对象,并付出析构和构造的成本
  • 解决方案:采用RVO优化:【More Effective C++】条款20:返回值优化RVO-CSDN博客
class Number {};
const Number operator+(const Number& lhs, const Number& rhs);

http://www.lryc.cn/news/299887.html

相关文章:

  • 站在C/C++的肩膀速通Java面向对象
  • 【AI视野·今日Robot 机器人论文速览 第七十八期】Wed, 17 Jan 2024
  • flask cors 跨域问题解决
  • 18 19 SPI接口的74HC595驱动数码管实验
  • 计算机网络概述习题拾遗
  • 你的电脑关机吗
  • flask+python儿童福利院管理系统pycharm毕业设计项目
  • React:高阶组件|ref转发
  • AI:127-基于卷积神经网络的交通拥堵预测
  • MongoDB聚合操作符:$abs
  • 【element-ui】输入框组件el-input输入数字/输出Number类型:type=“number“、v-model.number用法
  • 算法与数据结构
  • C++动态规划-线性dp算法
  • 基于 Python 深度学习的电影评论情感分析系统,附源码
  • 如何查看Apple Watch的步数?这里提供几个方法
  • 解决‘vue‘ 不是内部或外部命令,也不是可运行的程序(设置全局变量)
  • JavaWeb学习|i18n
  • 数据库日志已经很大了,比如200多G,不能收缩到几兆,实际操作过只能到30G
  • docker常用容器命令
  • 蓝桥杯(Web大学组)2022省赛真题:冬奥大抽奖
  • 单调队列 单调栈
  • Java基础-泛型
  • Vue 全组件 局部组件
  • 几个经典金融理论
  • c++语言max函数的使用
  • c++阶梯之类与对象(下)
  • 机器学习--K-近邻算法常见的几种距离算法详解
  • <网络安全>《30 网络信息安全基础(1)常用术语整理》
  • Git远程仓库的使用(Gitee)及相关指令
  • vscode +markdown 的安装和使用