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)这样就没问题了,可以传递进去一个常量了

相关文章
|
22小时前
|
存储 安全 编译器
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用(下)
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用
4 0
|
22小时前
|
存储 编译器 C语言
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用(中)
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用
4 0
|
22小时前
|
自然语言处理 编译器 C语言
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用(上)
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用
9 0
|
4天前
|
存储 编译器 Linux
|
6天前
|
存储 编译器 C语言
C++中的内存管理
C++中的内存管理
18 0
|
6天前
|
存储 Linux C语言
【C++从练气到飞升】07---内存管理
【C++从练气到飞升】07---内存管理
|
6天前
|
存储 编译器 C++
【C++】内存管理和模板基础(new、delete、类及函数模板)
【C++】内存管理和模板基础(new、delete、类及函数模板)
25 1
|
6天前
为对象分配内存TLAB
为对象分配内存TLAB
|
6天前
|
编译器 C语言 C++
【C++入门学习指南】:函数重载提升代码清晰度与灵活性
【C++入门学习指南】:函数重载提升代码清晰度与灵活性
25 0