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

隐式类型转换/匿名对象的使用以及构造拷贝构造的优化

示例一:

class A
{
private:int _n;
public:A(int n){_n = n;cout << "A()" << endl;}A(const A& a){cout << "A(const A& a)" << endl;}~A(){cout << "~A()" << endl;}
};
void func(A a){}

对于func可以有如下三种调用

int main()
{A a1(1);func(a1);
}
int main()
{func(A(1));
}
int main()
{func(1);
}

这三种哪种最好呢?构造越少就越好。

对于第二个,实际上是先调用构造函数构造出一个临时对象,再调用拷贝构造进行参数传递,而编译器将这两步优化为直接使用数字1去构造出形参

对于第三个,实际上是先用1构造出一个临时对象,再拷贝构造传参,同上,编译器合二为一了。

所以说,一个表达式,连续的构造会合二为一。

示例二:

还是这个,func最好使用引用传参

但这时,有些调用方式就会出现问题:

为什么呢?因为首先会用数字生成临时变量,再将变量给到引用。但是临时变量具有常性,将常量给到一个变量就会出错。所以应该为:

此时不管传常量对象还是变量对象都可以。前提是,这是一个只读函数

根据这些例子,其实不难看出,隐式类型转换也有常性

总结:

1.能使用匿名对象/隐式类型转换就使用,因为编译器可以优化

2.同一个表达式的多个构造/拷贝构造能够优化合二为一

3.隐式类型转换具有常性

4.能使用引用就使用引用


http://www.mrgr.cn/news/19607.html

相关文章:

  • Kafka【八】如何保证消息发送的可靠性、重复性、有序性
  • 什么是Selenium?使用Selenium进行自动化测试
  • 工欲善其事,必先利其器——推荐一款适合程序员专业编程显示屏
  • Mac(M2)系统手动安装ADB
  • 23. Redis数据结构(二)
  • 此项不起作用,请确保你的蓝牙设备仍可检测到
  • 体验通义灵码 @workspace:轻松分析项目结构,结合代码仓库理解工程、查询问答等
  • 如何把文件夹里的所有文件每个建立一个文件夹,并且以文件的名字命名
  • LeetCode 热题100-72 每日温度
  • 【C++ Primer Plus习题】10.8
  • 我的大模型岗位面试总结!太卷了!!!—我面试了24家大模型岗位 只拿了9个offer!
  • pod基础和镜像拉取策略
  • mysql实用系列:字段类型转换该怎么去转
  • YashanDB产品调优实战:分享日常调优技巧及提升系统性能的实战经验
  • 浅谈前端编码思路和编码习惯对项目质量的影响(一)
  • 佰朔资本:人民币涨超百点,“牛市旗手”拉涨!创业板指、深成指低开高走
  • 查询电脑上已经连接的wifi密码
  • 深入理解 Java 8 Stream API
  • 10 万元预算,竟能打造满足第一性原理计算的高性价比服务器
  • Tomato靶场渗透测试