c++相对c的增强

1:命名空间和头文件
命名空间:解决合作开发时命名冲突问题
标准化头文件如iostream,fstream等都位于标准化空间std中,并且c支持的头文件以c开头并且去掉.h如(cstdio,cstdlib,cstring),使用时要加上using namespace std;语句。
而保留的老版头文件则不在标准命名空间std中例如iostream.h等。新旧头文件不对功能进行大幅修改,只改动微小细节,因此新旧头文件并不是一一对应。
命名空间,域解析符::的使用:

#include <iostream>
using namespace std;
namespace A//自定义命名空间,可包含结构体,函数
{
       int a;
       struct stu
       {
              int age;
              char name[10];
        };
       namespace B//命名空间中嵌套命名空间
       {
           int a;
       }
       void print()
       {
           printf(“hello world”);
       }
}
int main()
{
    A::a = 11;
    A::B::a = 22;
    A::print();
    /*结构体书写形式*/
    struct A::stu demo;
    demo.age = 21;

    cout << A::a << endl;
    cout << A::B::a << endl; 
    cout << “struct:” << demo.age << endl;

    return 0;
}

2:iostream输入输出流头文件
cin是iostream类的一个实例。
头文件中定义了cin,cout,cerr,clog等象。用于标准输入输出,非缓冲错误,缓冲日志流。
char str[10] = “aaa”;
cout << str << “hello” << endl;
输出:aaahello并且换行。
3:变量使用时定义减小生命周期,节省内存空间
for(int i=0;i <10;i ++){}
i变量只在for循环中有效;

4:布尔类型bool
布尔类型变量自动转换为0和1两个值。

5:三目运算符
在c语言中,三目运算符输出的是值,不可作为左值被修改,而在c++中,输出的是变量,可被修改。

6:auto关键字
自动推导数据类型,必须初始化。一般情况写明数据类型,auto有特殊用途。
7:const
const是在c中是伪常量,可以用指针指向变量并且修改。
在c++中是真常量,常量数值存放在符号表中没有内存空间,不能被修改,指向他的是一块没用的地址
8:引用,变量的别名
定义的时候必须初始化绑定,一个指定对象且不可终于修改。
优:避免形参创建,更快的参数传递。
在两个值交换函数中,void swap(int &a,int &b)能直接交换ab值不用传地址。
常引用:const int &a;不希望通过引用修改原值。(类比linuxAPI open函数int open(const char *path,int flags)只强调引用,而不希望修改path)
constexpr:常量表达式,在编译时就确定计算结果,将表达式直接替换成最终结果,相对于宏来说没有额外开销更加可靠安全。

9:动态内存分配new 和delete
使用格式:
1:指针变量名=new int;
2:指针变量名=new int(5);初始化为5
3:指针变量名=new int[5];申请内存单元格个数(相对于申请动态数组)
申请二维数组:

int **p = new int*[num1];
for(int i=0; i <num1; ++i)
p[i] = new int[num2];

//释放二维数组占用的空间
for(int m=0;m <num1;m++)
delete[] p[m];
delete[] p; 

10:using代替typedef
using INT = int;
可以写在函数里面,限定作用域。
问:
1:指针与引用区别
1:本质,指针是一个变量保存地址,引用是原变量的别名。
2:引用不为null创建时初始化,指针可以为null,任何时候初始化
3:二级指针,无二级引用
4:sizeof
5:引用初始化后就不能改变了
6:swap(int &a,int &b)实参就是引用,指针要去接收。所以引用效率高

2:new与malloc区别
1:关键字,库函数
2:malloc一次性申请,new分块分配
3:返回值void*强转
4:new抛出异常,malloc返回null
5:malloc可分配任意字节,new只能是内存整数倍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值