一些关于c++的琐碎知识点

目录

bool强转

const构成重载:const修饰*p

 移动构造

new int (10)所做的四件事

this指针---为什么函数里面需要this指针?

.和->的区别

new创建对象

仿函数

new和malloc的区别

c++系统自动给出的函数有

delete和delete[ ]区别何在

检查有没有析构函数

explict外部

内存泄漏的本质:丢失了内存地址

不能重载的运算符:?:、::、*.

using

为什么空间释放了但还是可以读取数据

函数的生存期不受函数生存期影响时,可以使用引用返回;

struct和class在设计类时的区别

结构体为什么一定要内存对齐?

c++11的铁三角

右值/左值/值返回与将亡值

a++不可以取地址;++a可以取地址

引用的本质是指针,自身为常性


bool强转

可以将变量变为bool类型,在if语句中可以判断

operator bool() const
{
    return (ptr !=nullptr);
}

const构成重载:const修饰*p

void func(int *p){}
void func(const int* p){}

 移动构造

my_unique_ptr(const my_unique_ptr&& x)
{
    ptr = x.ptr;
    x.ptr = nullptr;
}

拷贝构造和移动构造同时书写了,那么就会调用移动构造

new int (10)所做的四件事

1.计算10的大小 2.malloc 3.赋值 4.返回所在地址

new没有能力去构造常对象 

一些关于c++的琐碎知识点_第1张图片is具有常性,不可以对is的指向进行修改。

 const修饰*is,is的指向可以修改

this指针---为什么函数里面需要this指针?

  • 创建对象类型有多个,方法共享只有一个,用this来调用函数方法
  • 系统是面向过程编程,底层把面向对象编程变为面向过程的体系
  • 类的成员函数都含有this指针,只有static,友元,全局没有this指针。

.和->的区别

.  的时候函数都是智能指针的方法

 -> 的时候函数都是 类 类 型 的方法

new创建对象

std::unique_ptr ip(new(10));
 
std::unique_ptr sp=new Int(100);

仿函数

struct ADD
{
    int operator()(int a, int b) const//仿函数()
    {
        return a + b;
    }
};
 
int main()
{
    ADD add;
    int x = add(12, 23);//调用仿函数
    //标准c++没有三元仿函数
    x = add.operator()(12, 23);//把括号当成函数名了
}

new和malloc的区别

  • 失败处理方式不同,new会抛出异常,malloc不会
  • new有构造函数予以赋值
  • new有重载运算符

c++系统自动给出的函数有

  • 缺省的构造
  • 缺省的拷贝构造
  • 缺省的析构
  • 缺省的赋值

 !!!以上四个必须有

delete和delete[ ]区别何在

int main()
{
    Int* p=new Int(10);
    Int*s =new Int[10];
 
    delete p;
    delete[]s;
    return 0;
}

检查有没有析构函数

小tips:写代码判断是否相等时得把常量放在左边,变量放在右边

explict外部

内存泄漏的本质:丢失了内存地址

不能重载的运算符:?:::*.

using

是类型重定义(命名),和typdef的意义差不多

为什么空间释放了但还是可以读取数据

int ar[100000];栈帧构建的太大,数据在接近栈处,即使把空间释放了,但是在处理过程中无法干扰数据,所以值还是可以被打印出来

函数的生存期不受函数生存期影响时,可以使用引用返回;

struct和class在设计类时的区别

* 1.模板类型定义class可以,typename可以,struct不可以

* 2.struct默认公有,class默认私有

* 3.在设计类型时,纯虚函数interface

*/

结构体为什么一定要内存对齐?

提高内存的访问效率

一些关于c++的琐碎知识点_第2张图片结构体内存对齐是拿空间换取时间的做法。提高效率

c++11的铁三角

C++11和C11都是C++11

右值/移动/完美转发

右值/左值/值返回与将亡值

 通用寄存器eax,ebx,ecx,edx(都只有四字节),作为将亡值的返回时的保存

 如何将结构体初始化后返回到调用函数内?

值返回时 会在主函数中建立一个将亡值的副本,把调用函数返回值(将亡值)赋给指针(内置类型)产生的将亡值不可写

 将亡值没有名字就是纯右值(归结到右值中),有名字就是泛左值(归结到左值中)

 将亡值在表达式的计算中产生

将亡值可修改吗:

1.内置类型值返回时的将亡值不可以修改

2.类类型(即程序员自己设计的类型)值返回时的将亡值可修改

a++不可以取地址;++a可以取地址

a++是一个没有名字的将亡值(a+1) 还没有给a赋值,取地址(先取地址再++)

++a是先把将亡值(a+1)已经赋值给了a,再取地址(先++再取地址)

引用的本质是指针,自身为常性

static没有this指针

static函数与非static函数最大的区别

你可能感兴趣的:(c++,c11,c++,开发语言)