C++内容(自用

C++从源文件到可执行文件的过程

这是另一个细致过程的blog
1.预处理 2.编译 3.汇编 4.链接
汇编产生的目标文件内容:至少有两个段——代码段和数据段
链接里动态/静态链接的优缺点

C++中的句柄(感觉用处不大)
C++和Java的联系与区别
全局变量和静态变量在什么时候初始化?
运行/编译/链接时出现的错误
说一下C++和C的区别

设计思想上:
C++是面向对象的语言,而C是面向过程的结构化编程语言
(面向过程——步骤化
面向过程就是分析出实现需求所需要的步骤,通过函数一步一步实现这些步骤,接着依次调用即可
面向对象——行为化
面向对象是把整个需求按照特点、功能划分,将这些存在共性的部分封装成对象,创建了对象不是为了完成某一个步骤,而是描述某个事物在解决问题的步骤中的行为)
语法上:
C++具有封装、继承和多态三种特性
C++相比C,增加多许多类型安全的功能,比如强制类型转换、C++支持范式编程,比如模板类、函数模板等

C++的const(神奇的东西)

这就是C++中的常量折叠:指const变量(即常量)值放在编译器的符号表中,计算时编译器直接从表中取值,省去了访问内存的时间,从而达到了优化。

而在此基础上加上volatile修改符,即告诉编译器该变量属于易变的,不要对此句进行优化,每次计算时要去内存中取数。(但有的编译器不会理会volatile)如果不用volatile,取const常量可能就从寄存器或符号表中取得了。

C/C++ 中指针和引用的区别

1.指针有自己的一块空间,而引用只是一个别名
2.使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小;
3.指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象 的引用;
4.作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引用的修改都会改变引用所指向的对象;
5.可以有const指针,但是没有const引用;
6.指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能 被改变;
7.指针可以有多级指针(**p),而引用只有一级;
8.指针和引用使用++运算符的意义不一样;
9.如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄露。
PS.指针和引用到了汇编一层的时候,执行的命令可以说是一样的

C++11的常用新特性(非常好!)
C++11中STL的四种智能指针

ps:智能指针是在析构函数中清楚内存的
由于智能指针本质是类,因此智能指针是通过析构函数释放内存的!
unique_ptr代替了auto_ptr,因为前者——两个unique_ptr不能指向一个对象,即 unique_ptr 不共享它所管理的对象。它只能对资源管理权限实现转移。这意味着,内存资源所有权可以转移到另一个 unique_ptr,并且原始 unique_ptr 不再拥有此资源。

C++17新特性
C++17中的inline变量

一点注释:曾经的C++,多个文件引用同一个头文件时,若想使用一个共同的变量,则须在头文件中使用extern关键字,现在可以用inline了
这里是extern的用法

C++内联函数
C++四种强制类型转换
红黑树的优点(非C++)
C++STL中的allocater

这个东西涉及到STL本质的内存使用

C++中STL容器的底层原理
C++中STL利用迭代器删除元素

关联容器和顺序容器有不同的情况,对于list来说,它使用了不连续分配的内存,并且它的erase方法也会返回下一个有效的iterator,因此上面两种正确的方法都可以使用。

C++中STL的reserve()和risize()
C++中struct和class的区别
C++ 虚函数实现机制

靠vtpr虚函数指针和vtbl虚函数表

C++继承过程中内存的分配
C++虚函数
C++ 继承与虚函数调用关系原理
C++ 中虚函数的缺省参数的继承,容易出问题
C++中纯虚函数
C++单继承多继承虚继承
堆与栈的区别和C++的内存分区
C++如何检测内存泄漏
C++ Volatile关键字解析

深入到了汇编语言和寄存器层面的理解,由于debug版和release版对汇编层次的语言检测标准不一样,所以引到下一个问题

debug版和release版的区别
拷贝构造函数,浅拷贝和深拷贝
模板的详细介绍
模板和虚函数的选择

个人理解:
虚函数更多是针对一种函数、一种操作所实现的多样性(做面食里做蒸馒头和做炒面的区别,主料相同但做法完全不同)
模板更多是针对同一种操作里不同类型所实现的多样性(烤串里烤羊肉串和猪肉串的区别,做法完全相同但主料不同)

new和delete的实现原理
override(重写)与final(最终)两个关键字
重载、重定义、重写
重载与命名空间配合使用的问题
关于变量地址+1的有趣实质
C/C++中的左值与右值,左值引用与右值引用

左值 (lvalue, locator value) 表示了一个占据内存中某个可识别的位置(也就是一个地址)的对象。

右值 (rvalue) 则使用排除法来定义。一个表达式不是 左值 就是 右值 。 那么,右值是一个 不 表示内存中某个可识别位置的对象的表达式。

std::forward完美转发

函数模板在向其他函数转发(即传递)该函数模板自身参数(形参)时,要保留该参数(实参)的左右值属性,即,如果实参是左值,那么它就应该被转发为左值;如果实参是右值,它就应该被转发为右值
但是,有一种情况例外:
std::forward(arg) 有两个参数:T 与 arg.

当T为左值引用时,T=X&, arg 被转换为 X& 并被返回
当T为非引用类型或右值引用时, T=X 或 T=X&&, arg 被转换为 X&& 并被返回(此时转为了右值引用)
将T的实际类型代入后,会发现出现了Base& && arg这种类型,编译器会将Base& &&转成Base&,这个过程称之为引用折叠, 引用折叠的规则如下, 简而言之,只有左右两个引用都为右值引用时才会折叠成右值引用

模板参数推导、引用折叠和完美转发
更明确的引用折叠讲解
using和typedef的复杂使用
typedef用法详解
C++11 并发相关内容
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值