C++分配内存和函数重载

简介: C++分配内存和函数重载

1.避免数据的复制

int v[]{12, 13, 14, 15}

for(auto x : v)

{

cout << x << endl;

}

相当于把v里每个元素都复制到x中

那怎么修改呢

for(auto &x : v)只用修改成这样,用引用的方式,就可以避免数据的复制

一般说,一个容器只要内部支持begin和end成员函数用于返回一个迭代器,能够指向容器的第一个元素和末端元素的后面,这个容器就可以支持范围for语句

2.C和C++的内存分配

前者3个,后者5个

3.malloc

malloc一般形式是

void * malloc(int NumBytes)

看下面范例

int * p = NULL;

p = (int *)malloc(10 * sizeof(int));

if(p != NULL)

{

*p = 5; //其实只用到了申请40字节的4个字节

cout << *p <

free§;

}

new/delete比malloc/free做了更多的工作,所以在C++中用new和delete

4.指针的初始化

对于指针的初始化,能用nullptr的全部用nullptr

cout << typeid(NULL).name() << endl; //int

cout << typeid(nullptr).name() << endl; //std::nullptr_t

5.struct

struct student
{
    private:
        int number;
        void func()
        {
            number++;        
        }
}
student stu1;
stu1.number = 1001 //不可以引用
//不可以通过对象名引用结构或类的成员,否则编译时报错
//但是在成员函数func中还是可以直接引用number的,因为成员函数可以直接访问成员变量而不管成员变量是否为private

结构体中默认是public,类中则是private,他们的继承也是

6.C++中更习惯使用引用类型的形参来取代指针类型的形参

7.函数重载

void func1(const int i){}

void func(int i) {}

这样的重载不可以,因为const关键词在比较同名函数时会被忽略,这两个函数相当于参数类型和数量完全一样,所以函数重载不成立,编译链接时会报错

8.函数形参中带const

void func(const student &stu)

{

stu.num = 1010//这就是错误的,不能修改stu的内容

}

void func(cosnt int i) //实参可以是正常的int,形参可以用const int接,这没问题

{

int i = 100; //这也不行,不能给常量赋值

}

把形参写成const的好处

1.可以防止无意中修改了形参值导致实参值被无意中修改掉

2.实参类型可以更加灵活

就像上面那个,实参可以是正常的int,形参可以用const int接,这没问题

形参可以接受多样化的实参类型

在看void func2(int &a){}

func2(123)这是不可以的,必须传递进去一个变量

但是void func2(const int &a){}

func2(123)这样就没问题了,可以传递进去一个常量了

相关文章
|
1月前
|
存储 Java 编译器
C++:内存管理|new和delete
C++:内存管理|new和delete
|
1月前
|
存储 算法 编译器
【C++ 内存管理 重载new/delete 运算符 新特性】深入探索C++14 新的/删除的省略(new/delete elision)的原理与应用
【C++ 内存管理 重载new/delete 运算符 新特性】深入探索C++14 新的/删除的省略(new/delete elision)的原理与应用
47 0
|
1月前
|
IDE Linux 开发工具
内存泄漏检测工具Valgrind:C++代码问题检测的利器(一)
内存泄漏检测工具Valgrind:C++代码问题检测的利器
92 0
|
5天前
|
存储 人工智能 程序员
【重学C++】【内存】关于C++内存分区,你可能忽视的那些细节
【重学C++】【内存】关于C++内存分区,你可能忽视的那些细节
35 1
|
5天前
|
编译器 C++
C++函数重载详解
C++函数重载详解
6 1
|
29天前
|
编译器 C语言 C++
【C++】函数重载
【C++】函数重载
25 2
|
29天前
|
存储 编译器 程序员
【C语言】内存的动态分配与释放
【C语言】内存的动态分配与释放
27 0
|
1月前
|
存储 Linux C语言
【C++练级之路】【Lv.5】动态内存管理(都2023年了,不会有人还不知道new吧?)
【C++练级之路】【Lv.5】动态内存管理(都2023年了,不会有人还不知道new吧?)
|
1月前
|
安全 程序员 C++
【C++ 基本知识】现代C++内存管理:探究std::make_系列函数的力量
【C++ 基本知识】现代C++内存管理:探究std::make_系列函数的力量
102 0
|
1月前
|
存储 Linux 程序员
【Linux C/C++ 堆内存分布】深入理解Linux进程的堆空间管理
【Linux C/C++ 堆内存分布】深入理解Linux进程的堆空间管理
79 0