c++学习笔记 一(1)

C++继承了所有C的特性
C++设计目标是运行效率与开发效率的统一
C++(面向对象、类型加强、函数加强、异常处理)
————/
C++强调语言的“实用性”,所有变量都可以在需要时再定义
       intc=0;
       for(inti=0;i<10;i++){           //c中错误
              for(intj=0;j<10;j++){
                     c+=i*j;
              }
       }
————/
C中register关键字请求编译器将局部变量存于寄存器,无法取得register变量地址
C++编译器有自己的优化方式,不使用register也可能优化,仅为兼容c语法
C++中可取register变量地址,取register变量地址时,register对变量的声明变得无效
早期C编译器不会对代码进行优化,因此register变量是一个很好的补充
————/
       constint c=0;
       int*p=(int*)&c;
       *p=5;
       printf("c=%d\n",c);             
       //c编译结果5
       //c++编译结果0,process exited normally
C++编译器:
当碰见常量声明时在符号表中放入常量
编译过程中若发现使用该常量则直接以符号表中的值替换
编译过程中若发现对const使用了extern或&操作符,则给对应常量分配存储空间
C++编译器虽然可能为const常量分配空间,但不会使用其存储空间中的值


C语言中const变量是只读变量,不能出现在赋值号左边,但有自己的存储空间
C++中const常量可能会被分配存储空间(目的兼容c):
       当const常量为全局,且需要在其它文件中使用(extern)
       当使用&操作符取const常量地址
————/
int main(int argc, char *argv[]) {
   const int a = 1;
   const int b = 2;
int array[a +b] = {0};  
//c运行错误,因ab本质变量,编译时无法确定,c++编译运行正常
   int i = 0;
   for(i=0; i<(a+b); i++)
    {
       printf("array[%d] = %d\n", i, array[i]);
    }
   return 0;
}
————/
C++中const常量类似于宏定义          const int c = 5 ≈ #define c 5
C++中const常量与宏定义不同:
       const常量由编译器处理,提供类型检查和作用域检查
       宏定义由预处理器处理,单纯文本替换
————/
void f()
{
   #define a 3
   const int b = 4;
}
void g()
{
   printf("a = %d\n", a);    //正确,宏未达到预想局部效果
   printf("b = %d\n", b);    //报错
}
int main(int argc, char *argv[])
{
   f();
   g();  
   return 0;
}
解决方法:f()末尾加 #undef a
————/struct类型的加强
C语言struct定义一组变量的集合,C编译器并不认为这是一种新类型
C++中struct是一个新类型定义声明
struct Student{
       intage;
       constchar*name;
};
int main(){
       Students1={26,"lyl"};          //c++正确,c不认为Student是一新类型
}
————/
C++中所有变量和函数都必须有类型
C中默认类型在C++中不合法
f(i){               //c编译正确,默认参数、返回值均为int类型
       printf("i=%d\n",i);
}
g(){
       return5;
}
int main(){
       f(10);
       printf("%d\n",g());
       g(1,2,3);         //不报错,垃圾特性
       return0;
}
int f(); 与 int f(void); 的区别是什么?
C++中f()即认为其不接受任何参数
————/
C中,int f()表返回值为int,接受任意参数
C++中,int f()和int f(void)都表示返回值为int无参函数
————/总结
C++以C语言为基础进行了加强
C++更强调实用性,可在任意地方声明变量
C++中register只起向后兼容作用,C++编译器能够进行更好的变量优化
C++中const是个真正意义上的常量,而不是只读变量
C++强类型,任意程序元素都必须明确指明类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值