《More Effective C++》的学习

news/2024/10/7 17:12:09 标签: 学习

引用与指针 

没有所谓的null reference

reference一定需要代表某个对象,所以C++要求reference必须有初值。

    QString &s;

 

使用reference可能比使用pointer更高效。

因为reference一定是有效的,而指针可能为空(需要多加一个判断)。

指针可以被重新赋值,指向另一个对象,而引用总是指向初始化时的那个对象。

------

旧式的C转型方式:几乎允许你将任何类型转换为任何其他类型。

pointer-to-const-object ---> pointer-to-non-const-object

改变对象的常量性

---

static_cast基本上和C旧式转型有相同的威力,限制。

strcut--->int 不可以

double--->pointer 不可以

移除表达式的常量性  不可以

---

const_cast

改变表达式中的常量性和变易性

可以将某个变量的常量性去除。

---

C++中真正的临时对象是不可见的---不会在源代码中出现。

只要产生了一个non-heap object,没有命名,就产生了一个临时对象。

void test(const std::string & str)
{

}
    char buffer[10];
    test(buffer);

从char数据--->const string &

此时类型是不吻合的,编译器此时会产生一个类型为string的临时对象。

一个临时对象的构造和析构,有其非必要的成本。

---

如果对象被传递给一个reference-to-non-const参数,并不会发生此类转换。

编译器会阻止的。

void test(std::string & str)
{

}
    char buffer[10];
    test(buffer);

思考:因为如果此时产生了一个临时变量string,那么,在函数中如果改变它的值,对buffer是没有影响的,这就违背了我们编写该函数的目的。

---

函数返回一个对象时,会产生临时对象。

此时我们应该做的是,努力降低返回对象的成本。

存在一种特殊写法,在函数返回对象时,可以让编译器消除临时对象的成本 ,就是返回constructor arguments来取代对象。

这样还是会产生临时对象。

但编译器不需要产生“函数内的临时对象”和“函数返回的临时对象”,它们可以将return表达式定义的对象构造于c的内存中。此时没有任何临时变量被产生出来。

const reational operator*(const reational& lhs,const reational& rhs)
{
    return reational(lhs.num()*rhs.num(),lhs.count()*rhs.count());
}

rational a = 10;
rational b(1,2);
retional c = a * b;

 


http://www.niftyadmin.cn/n/5693103.html

相关文章

单片机原理及其应用:新手快速入门

单片机(Microcontroller,简称 MCU)是一种广泛应用于嵌入式系统中的微型计算机。对于初学者来说,了解单片机的基本原理及其在日常生活中的应用是入门嵌入式开发的第一步。本篇博客将从单片机的基本概念开始,带领大家逐步…

hutool bug

Hutool参考文档 不用随便升级版本 版本5.8 1: 不要用 ReflectUtil.newInstance(cName); * 和spring 部分框架整合 ,子类转换为父类或者接口失败,报转换失败的错误 https://gitee.com/dromara/hutool/issues/I18NCR?skip_mobiletrue 改成使…

数学概念算法-打印100以内的素/质数

素数:只能被1和自己整除的数 暴力破解 埃氏筛选 找到第一个数字,如果它是素数,则把它的倍数全部划掉 比如数字2是素数,那么 4,6,8,10,12。这些数字肯定不是素数,所以不用再考虑,直接划掉即可 第二步&#…

1007D. 航行(高消之把可以递推的丢到外面处理)

http://cplusoj.com/d/senior/p/SS241007D 前面64分显然,搜个状态,然后转移就行,这不是重点。 考虑我们现在高消的状态数太大,而我们实际上需要的只有 ( x , 0 ) (x,0) (x,0) 的状态,那它们之间能不能提前把关系推出…

[C语言]第十一节 函数递归一基础知识到高级技巧的全景探索

目录 11.1. 递归是什么? 11.1.1 递归的思想: 11.2 递归的限制条件 举例1:求n的阶乘 画图推演 举例2:顺序打印⼀个整数的每⼀位 画图推演 11.3. 递归与迭代 举例3:求第n个斐波那契数 11.1. 递归是什么&#xff…

Android阶段学习思维导图

前言 记录下自己做的一个对Android原生应用层的思维导图,方便个人记忆扩展;这里只露出二级标题。 后语 虽然有些内容只是初步了解,但还是记录了下来;算是对过去一段学习的告别。

程序化交易的接口从哪里获取?怎么选择?

炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…

Java性能调优:实战技巧与最佳实践

引言 Java作为企业级应用开发的首选语言之一,其性能直接影响到系统的响应速度和用户体验。性能调优是一项复杂的工作,涉及多个层面的知识和技术。本文将通过具体的示例,探讨一些常见的性能调优技巧及最佳实践。 1. 了解你的应用程序 示例&…