![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++语法
日常遇到的问题,感想
梅杏柿
这个作者很懒,什么都没留下…
展开
-
C++双重检测实现单例的潜在问题
#include <pthread.h>class single{public: static single *getSinle();private: single() {} ~single() {} static single *p; static pthread_mutex_t lock;};single *single::p = NULL;pthread_mutex_t single::lock = PTHREAD_MUTEX_IN原创 2021-05-10 17:49:31 · 1413 阅读 · 0 评论 -
C++对象静态变量的继承
如果父类中有静态变量,子类可以继承静态变量。也可以调用,子类如果对变量进行更改,那么父类的变量也会改变。二者共享同一份变量。当然子类也可以命名一个同名变量,此时如果子类再想调用父类的静态变量,则可以通过作用域来调用。#include <iostream>using namespace std;class Single{};class stest{ public: static int s;};int stest::s=10;class schld:pu原创 2021-05-10 16:31:46 · 1635 阅读 · 1 评论 -
C++static关键字作用
static的作用有:1、局部变量在函数体内,静态变量具有记忆功能,被声明为静态的变量在函数调用过程中,值不变;也就是静态变量只初始化一次,即使函数返回,重新进入,它的值也会保持不变。2、全局变量普通全局变量对整个工程可见,其他文件使用extern声明后就可以使用。所以需要注意变量的命名。而静态全局变量仅对当前我呢间可见,其他文件不可访问。函数静态函数也是只能在声明它的文件中可见,其他文件不能引用该函数对于C++面向对象又有对于变量而言1、最好是类内声明,类外初始化(为什么?)2、无原创 2021-04-07 13:30:29 · 248 阅读 · 1 评论 -
static_cast用法
怎么去记static_cast作用?第一条:用于自定义数据类型用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。第二条:用于内置类型用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。第三条:用于指针类型③把空指针转换成目标类型的空指针。第四条:特殊把任何类型的表达式转换成void类型。static-cast不用去除const...原创 2021-03-11 15:35:28 · 394 阅读 · 0 评论 -
纯虚函数与虚继承
虚函数的声明语句末尾中加个 =0 ,就是纯虚函数。有纯虚函数的类就是纯虚类。原创 2021-03-05 21:31:34 · 275 阅读 · 0 评论 -
父类和子类同名函数以及虚函数多态问题
1、子类和父类返回值参数相同,函数名相同,有virtual关键字,则由对象的类型决定调用哪个函数。2、子类和父类只要函数名相同,没有virtual关键字,则子类的对象没有办法调用到父类的同名函数,父类的同名函数被隐藏了,也可以强制调用父类的同名函数class::funtion_name。3、子类和父类参数不同,函数名相同,有virtual关键字,则不存在多态性,子类的对象没有办法调用到父类的同名函数,父类的同名函数被隐藏了,也可以强制调用父类的同名函数class::funtion_name。4、子类和原创 2021-03-05 15:20:32 · 5808 阅读 · 0 评论 -
C++相关
1数组相关1、数组的第一维长度可以省略,第二维长度不能省。而且只有在初始化数据的数组才可以省略,如果是单独的声明则无法。2、对于二维数组,例如 a[3][4] *(a+5) 中(a+5)相当于a[5],所以已经越界了,也就是说不能用a+x,取访问第0行之后的数据。而a作为指针,+1则加的是长度为第二维的长度3、&a表示的是数组的首地址,a+1,表示的是数组首元素的地址,也就是a和&a不一样2、static静态变量和全局变量的相同点在于都保留在静态存储区,声明期与程序声原创 2021-03-04 09:14:15 · 115 阅读 · 1 评论 -
C++类对象重载赋值的时候为什么要返回引用类型?
有两个原因第一个是为了减少内存空间的浪费和多余的操作。如果不使用引用,则函数首先在内存中创建一个空间接受返回值,然后再从这个地址赋值给变量以下面为例int func(int x){return x};int c=func(2);实际上是这样一个操作,先创建了一个临时变量temp接收返回值,然后再把temp赋值给cx=2;//x在栈区temp=x;c=temp;而如果是引用返回,则相当于是直接把值赋给变量c=x;实际上应该是创建了一个引用?这里原理我暂时理解不清楚,只能把效果讲清原创 2021-03-02 19:34:43 · 553 阅读 · 0 评论 -
C++学习笔记
该关键字告诉编译器,函数中不会发生异常,这有利于编译器对程序做更多的优化。如果在运行时,noexecpt函数向外抛出了异常(如果函数内部捕捉了异常并完成处理,这种情况不算抛出异常),程序会直接终止,调用std::terminate()函数,该函数内部会调用std::abort()终止程序。移动构造函数(move constructor)移动分配函数(move assignment)析构函数(destructor)。这里提一句,在新版本的编译器中,析构函数是默认加上关键字noexcept的。下面代码可原创 2021-03-02 18:25:05 · 123 阅读 · 0 评论 -
C++运算符重载
++,–,+,-,=多是类的成员函数,而==,!=,>>,<<则要定义为友元函数原创 2021-03-02 11:04:02 · 39 阅读 · 0 评论 -
C++函数指针和typedef
void (*signal(int signum,void(* handler)(int)))(int);// 等价于下面两行typedef void (*sighandler_t)(int);sighandler_t signal(int signum,sighandler_t handler)1、 signal(int signum,void(* handler)(int))这是一个函数,函数名为signal(1) 第一个形参:int signum,是一个整形变量;(2) 第二个形参:vo原创 2021-03-02 08:47:23 · 142 阅读 · 0 评论 -
C++学习笔记
(void*) p;表示的是一个通用指针。常量指针和指针常量;指针常量是一个常量,常量是不能再赋值的,但是这个常量是指针,所以指针指向内容的值可以更改。常量指针,是一个指针,但是指针指向的内容是一个常量,所以指针内容不能更改,但是指针可以再赋值。虽然不可以通过这个指针修改内容,但是可以通过原声明修改。int a=1;int const* b=&a;*b=2;//非法a=2;//合法...原创 2021-03-01 18:58:58 · 48 阅读 · 0 评论 -
C++关键字const的作用
const作用(一旦被修饰,被修饰的量不能更新)1、修饰变量,说明该变量不可以被改变;2、修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer);常量指针 const int *p;指向的内存空间可以改,不能修改指向内存的值指针常量 int *const p;指向的内存空间不能改,值可以改既修饰指针又修饰常量const int * const p;3、修饰引用,指向常量的引用(reference to const),用于形参类原创 2021-02-27 23:00:33 · 1884 阅读 · 0 评论