概述
目录
- 1. malloc 和new 的区别
- 2. 把const 加在指针不同的位置是否有区别;
- 3. const(只读)
- 4. 引用和指针的区别
- 5. 函数传入值参数和传入引用参数有什么区别
- 6. 函数返回是引用和非引用的区别
- 7. 什么时候需要为传入的引用参数加上const
- 8. C++中可以用struct 和class 来定义类型. 这两种类型有什么区别?
1. malloc 和new 的区别
malloc | new | |
---|---|---|
属性 | C库函数 | C++运算符 |
返回类型 | 失败返回NULL,成功返回申请内存的首地址void*类型(需要强制类型转换) | 失败抛出异常bad_alloc,成功返回对象类型的指针 |
内存分配 | 需要显式指定内存分配的字节数 | 编译器根据类型,自动分配对象大小的内存空间(会调用malloc),自动调用类对象的构造函数,对类对象进行初始化 |
释放内存 | free | delete—调用类的析构函数,调用operator delete函数,调用free函数 |
2. 把const 加在指针不同的位置是否有区别;
- const在解引用符号的左边,那么不能通过这个指针来修改指向的内存,但是指针的指向是可以修改的
- const在解引用符号的右边,那么可以通过这个指针来修改指向的内存,但是指针的指向是不可以修改的
3. const(只读)
对于任何不修改数据成员的函数都应该声明为const成员函数,提高程序可靠性。
不允许把一个const对象的地址赋给一个指向非const对象的指针(不能给修改的机会,可修改的可以给只读,但只读的不能给可修改的)。
-
const 数据成员
在类的成员函数里都只能调用它,不能改变它。 -
const 成员函数
const改变了this的类型,变为指向const对象的指针(所以static 成员函数不能声明为const,因为static成员函数没有this指针给const作转换)。不能修改调用该函数的对象,即只能使用对象的数据成员,不能修改这些数据成员。
在声明和定义的时候都必须加const,调用时不用加。int A::get_data(void) const {//const 成员函数 return m_data; } //===》》 int A::get_data(const A* const this) const { return m_data; }
-
const 对象
const对象只能调用const成员函数,不能调用非const成员函数。
#include <iostream>
using namespace std;
class A{
private:
int m_data;
const char m_sex;//const 数据成员
public:
A(int data = 0, char sex = 'm'):m_data(data), m_sex(sex){}
void set_data(int data){
m_data = data;
return ;
}
int get_data(void) const {//const 成员函数
return m_data;
}
char get_sex(void) const {
return m_sex;
}
void print() const {
cout << "m_data=" << get_data() << endl;
cout << "m_sex=" <<
get_sex() << endl;
return ;
}
};
int main(void){
A a;
a.print();
cout << "change data from 0 to 5" << endl;
a.set_data(5);
a.print();
const A aa;//const 对象
aa.print();
return 0;
}
4. 引用和指针的区别
-
引用的本质是指针常量(用的时候理解成别名或者说本体,别管指针),如下
-
int a = 10; int &p = a; /*====>底层原理:int *const p = &a; p的值初始化之后不可修改,也就是指针指向不可改,也就是引用不可更改,只能绑定一次。*/ p = 11; /* *p = 11;编译器发现p是引用,自动给p解引用。 */
5. 函数传入值参数和传入引用参数有什么区别
- 传入值参数,形参要复制一份实参
- 传入引用参数,函数可以直接访问实参对象,无需复制。
6. 函数返回是引用和非引用的区别
- 函数返回是非引用类型
#include <iostream> int add(int a, int b){ int sum; sum = a + b; return sum; } int main() { int s; s = add(1, 1); //int temp = sum;s = temp;//函数调用处产生的临时对象temp接住函数的返回值 return 0; }
- 函数返回引用类型时,不会复制返回值,返回的是对象本身。
#include <iostream> int& add(int a, int b){ int sum; sum = a + b; return sum; } int main() { int s = add(1, 1);//理解成s接住sum本体的值 int &ss = add(1, 1);//理解成ss就是sum本体 return 0; }
7. 什么时候需要为传入的引用参数加上const
- 不会修改所引用的对象
8. C++中可以用struct 和class 来定义类型. 这两种类型有什么区别?
- 如果没有标明成员函数或者成员变量的访问权限级别,在struct
中默认的是public, 而在class 中默认的是private.
最后
以上就是落寞夏天为你收集整理的引用&指针&const1. malloc 和new 的区别2. 把const 加在指针不同的位置是否有区别;3. const(只读)4. 引用和指针的区别5. 函数传入值参数和传入引用参数有什么区别6. 函数返回是引用和非引用的区别7. 什么时候需要为传入的引用参数加上const8. C++中可以用struct 和class 来定义类型. 这两种类型有什么区别?的全部内容,希望文章能够帮你解决引用&指针&const1. malloc 和new 的区别2. 把const 加在指针不同的位置是否有区别;3. const(只读)4. 引用和指针的区别5. 函数传入值参数和传入引用参数有什么区别6. 函数返回是引用和非引用的区别7. 什么时候需要为传入的引用参数加上const8. C++中可以用struct 和class 来定义类型. 这两种类型有什么区别?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复