c++知识点

malloc free #include 库函数
new delete key work 关键字 相当于 int for
此两关键字,重点用在类对像的申请与释放。申请的时候会调用构造器完成初始化,释
放的时候,会调用析构器完成内存的清理
开辟单变量地址空间
int *a = new int(5); //开辟大小为 sizeof(int)空间,并初始化为 5

struct Stu
    {
        int age;
        string name;
    };
Stu *pstu=new Stu{10,"jake"};//初始化一个结构体

开辟数组空间
一维数组

char *p=new char[40];
   strcpy(p,"china");
   cout<

多维数组

int(*pa)[4]=new int[3][4]{{0}};
for(int i=0;i

delete /delete[] 用法:

int *p=new int;
delete p;
int *q=new int[100];
delete []q;
int (*qq)[3][4] = new int [2][3][4];
delete []qq;
//c语言版本
    int *p=(int*)malloc(100);
    if(p == NULL)
        return -1;
    //C++内存申请失败会抛出异常 异常 一般不用  看看就行
    try
    {
        int *pi=new int[100];
    }
    catch(const std::bad_alloc e)
    {
        cout<<"new error"<

C++提供了 inline 关键字,实现了真正的内嵌
宏函数 VS普通函数VS inline 函数
宏函数:
优点:代码内嵌,避免了函数的调用 辟免压栈与出栈的开销
缺点:代码替换,易使生成代码体积变大,易产生逻辑错误,无类型检查
普通函数
优点:一段高度抽象的逻辑,不易产生歧义,使text段体积变小,会进行类型检查
缺点: 函数调用的压栈与出栈的开销
inline
优点:避免调用时的额外开销(入栈与出栈操作)
代价: 由于内联函数的函数体在代码段中会出现多个“副本”,因此会增加代码段的空间。
本质:以牺牲代码段空间为代价,提高程序的运行时间的效率。
适用场景:函数体很“小”,且被“频繁”调用。

类型强转(type cast)
{静态类型转换static_cast,重解释类型转换reinterpret_cast,
( 脱) 常类型转换const_cast,动态类型转换dynamic_cast}
1.静态类型转换static_cast
static_cast<目标类型> (标识符)
在一个方向上可以作隐式转换,在另外一个方向上就可以作静态转换

int main(){
    int a = 10;
    int b = 3;
    cout<(b)<
image.png

2.重解释类型转换reinterpret_cast
reinterpret_cast<目标类型> (标识符)
对于无隐式的类型转化,static_cast 已不可用

int a[5] = {1,2,3,4,5};
    int *q = reinterpret_cast((reinterpret_cast(a) +1));
    printf("%x\n",*q);

3.( 脱) 常类型转换const_cast
const_cast<目标类型> (标识符) //目标类类型只能是指针或引用

func( int &s){
    cout<(a));
    int &ra=const_cast(a);
    ra=200;
    cout<<"a="< 
  
image.png

4.动态类型转换dynamic_cast
dynamic_cast<目标类型> (标识符)用于多态中的父子类之间的强制转化

const与#define
宏是在预处理阶段发生替换 const是在编译阶段发生替换

命名空间(namespace scope)
全局无名命名空间

int v=55;
void func()
{
    cout<<"void func()"< 
  
image.png

NameSpace 是对全局(Global scope)区域的再次划分
命令空间的声明及 namespace 中可以包含的内容
namespace NAMESPACE
{
全局变量 int a;
数据类型 struct Stu{};
函数 void func();
其它命名空间 namespace
}

//命名空间的key word namespace 空间名
namespace Space{
    int x;
    void func()
    {
        printf("void func");
    }
    struct Stu
    {
        int a;
        int b;
    }stu;
}

1.直接指定 命名空间: Space::a = 5;
2.使用 using+命名空间+空间元素:using Space::a; a = 2000;
3.使用 using +namespace+命名空间: using namespace Space;

namespace Space
{
    int x;
    int y;
}
namespace Other
{
    int x;
    int y;
}
int main()
{
    Space::x=200;//直接指定 命名空间
    cout<
image.png

命名空间支持嵌套

namespace MySpace
{
    int x = 1;
    int y = 2;
namespace Other {
    int m = 3;
    int n = 4;
}
}
int main()
{
    using namespace MySpace::Other;
    cout<

你可能感兴趣的:(c++知识点)