语言本身:c是c++的一个子集,c++在c的基础上增加了 类 和 模板 类型
一方面:c++加强了c的过程化功能,引入了 重载和异常处理等
另一方面:扩展了面向对象设计的内容 如:类,友元,继承,虚函数,模板
编程角度:c是一中结构化编程语言 重点在于算法和数据结构
c++是面向对象的编程语言 重点在于如何设计对象模型
const关键字作用于修饰普通变量和指针变量,
如果修饰变量名,则该变量变成常变量,不能被修改
如果修饰指针变量
const在c和c++中略有不同
在c中,c的编译器并不会把const修饰的变量当成常量,会为其分配内存空间,c编译器不知道它在编译器时的值(c++可以)


volatile关键字 含义:"易变的"
告诉编译器volatile变量随时可能发生变化的,与volatile变量有关的运算不要进行编译优化,每次使用它必须从volatile变量地址读取
何为编译优化?
- int main()
- {
- volatile int a = 10;
- int i = a;
- /*
- 其他代码
- */
- int j = a;
- return 0;
- }
如果没有volatile 编译器发现两次从a的地址读数据的代码之间没有对a进行过操作,它会自动将上次a的值放到中,

给出几个使用volatile关键字的示例
1)多线程中被几个任务共享的变量
2)中断服务子程序会访问到的非自动变量

1.静态转换(static_cast)
static_cast用于明确定义的转换,包括"安全"转换(int---long)和不安全转换(long---int会导致信息丢失)但知道定义的转换,使用void*强转转换和隐式类型转换
- #include
- using namespace std;
- int main()
- {
- int i=0x11223344;
- long j;
- double k;
- //非强制安全转换 隐式转换
- j=i;
- k=i;
- //也可以 突出转换行为
- j=static_cast<long>(i);
- k=static_cast<double>(i);
-
-
- //非安全转换---导致信息丢失
- // i=j //丢失数字
- // i=k //丢失信息
- i=static_cast<int>(j); //表示我知道 消除警报
- i=static_cast<int>(k); //
-
- //
- void *vp=&i;
- //旧时风格可能产生危险的转换
- float* fp=(float*)vp;
- //新方式
- fp=static_cast<float*>(vp);
-
-
- return 0;
- }
从const转换为非const或者从volatile转换为非volatile可以使用const_cast

用于类继承结构中实现类型安全的对象指针向下转换

malloc/free是c语言的标准库函数
new/delete是c++中运算符
new运算符会自动调用对象的构造函数 delete会自动调用对象的析构函数
因为malloc/free不满足为对象动态分配内存空间的要求,
对象在创建是要自动调用构造函数 销毁时要自动执行析构函数
malloc/free是库函数不是运算符所以不在编译器的控制权限之内,不能把执行构造函数和析构函数交给malloc/free
因为c++经常要调用c函数,而纯c只能用malloc/free管理内存
不要返回局部变量, 局部变量返回时会被销毁,
不要返回malloc/new分配的内存引用, 函数返回的引用只是作为一个临时变量出现,没有被赋予一个实际变量,那么这个引用所指的空间就无法释放,造成内存泄露.