网站首页 > 基础教程 正文
C++必知必会
1、strlen和sizeof区别?
sizeof是运算符,不是函数,结果在编译时得到而非运行中获得;sizeof参数可以是任何数据的类型或者数据
strlen是字符处理的库函数;strlen的参数只能是字符指针且结尾为'\0'的字符串。
因为sizeof值在编译时确定,所以不能用来得到动态分配(运行时分配)存储空间的大小。
2、C++中struct和class区别
C++的struct可以有成员函数、公有和私有部分;任何可以使用class完成的工作,同样可以使用struct完成;
一般成员在struct默认是公有的,class则默认是私有的;class默认是private继承,而struct模式是public继承。
C中struct是用户自定义数据类型;C++中struct是抽象数据类型,支持成员函数的定义,即能实现多态。另外,C结构体中的成员不可以是函数。
一个结构标记声明后,在C中必须在结构标记前加struct关键字,才能做结构类型名;C++中结构体标记可以直接作为结构体类型名使用。
3、define宏定义和const的区别
define是在编译的预处理阶段起作用,const是在编译、运行的时候起作用;
define只做替换,不做类型检查和计算;const常量有数据类型,编译器可以对其进行类型安全检查
define只是将宏名称进行替换,在内存中会产生多分相同的备份。const在程序运行中只有一份备份;宏定义的数据没有分配内存空间,只是替换作用;const定义的变量需要分配内存空间。
4、C++中static的作用
static: 所有加static的全局变量和函数不可以在其他文件中使用,反之没有static修饰的可以在其他文件中使用。
未初始化的全局静态变量与局部静态变量,都存在全局未初始化区,且默认初始化为零。
函数内定义变量有static修饰的话,则该变量始终存在,且只进行一次初始化,其作用范围与局部变量相同,函数退出后不会被销毁,但不能使用。
类中的static成员变量:只与类关联,不与类的对象关联。定义时要分配空间,不能在类声明中初始化,必须在类定义的外部初始化,初始化时不需要标示为static;可以被非static成员函数任意访问。
static成员函数:不具有this指针,无法访问类对象的非static成员变量;不能被声明为const、虚函数和volatile;
5、final和override关键字作用
override指定了子类的这个虚函数是重写的父类的,若函数名字输错了的话,编译器是不会编译通过。
final:不希望某个类被继承,或不希望某个虚函数被重写,可以在类名和虚函数后添加final关键字,添加final关键字后被继承或重写,编译器会报错.
6、重载overload和重写override
重载overload是指在同一范围内的同名成员函数才存在重载关系。主要特点是函数名相同,参数类型和数目不同。
重写override是派生类中覆盖基类中的同名函数,重写就是基类中某个定义为虚函数的内容。其特点是与基函数有相同参数个数、返回类型和参数类型。
7、浅拷贝和深拷贝的区别
浅拷贝:浅拷贝只是拷贝指针,并没有新开辟一个地址,拷贝的指针和原来的指针指向同一块地址,如果原来的指针所指向的资源释放了,那么再释放浅拷贝的指针的资源就会报错。深拷贝:深拷贝不仅拷贝值,还开辟出一块新的空间用来存放新的值,即使原先的对象被释放内存了,也不会影响到深拷贝得到的值。在实现拷贝赋值的时候,若有指针变量的话是需要实现深拷贝的。
8、内联函数和宏定义的区别
在编译前,宏定义为字符串替换。而内联函数可以进行参数类型检查且具有返回值。内联函数在编译时直接将函数代码嵌入到目标代码中,省去函数调用的开销提高了效率。宏定义时参数一般要括起来否则容易出现歧义。
内联函数有类型检测、语法判断等功能,但内敛函数不适合有循环语句的代码。
9、volatile、mutable和explicit关键字
volatile 声明的类型变量可以被某些编译器更改,如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。当使用 volatile 声明的变量的值时,系统总是重新从它所在的内存读取数据。用于:多线程中被共享的变量,则需要volatile修饰变量。
mutable是可变的意思,在C++中,mutable是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const函数里面修改一些跟类状态无关的数据成员,那么这个就应该被mutable来修饰。
explicit用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。
如果想看后续更多资源,请关注公主号:城子编程特讯
猜你喜欢
- 2024-10-12 C++中override与overload的区别:深入解析与应用
- 2024-10-12 C++中的static_cast #程序代码 c++ static用法
- 2024-10-12 为什么C++ 单例局部static初始化是线程安全的?
- 2024-10-12 编码规范-C++:尽可能使用static_cast而不是reinterpret_cast
- 2024-10-12 C++类对象中的this指针与静态成员:理解与应用
- 2024-10-12 看完就会用的C++17特性总结 c++ 17 新特性
- 2024-10-12 C++|变量的类型系统和属性 c++变量有哪几种作用域
- 2024-10-12 C++友元和静态函数:如何用特殊的方式访问和管理类的成员
- 2024-10-12 C++中的static关健字 c static关键字
- 2024-10-12 C++静态成员变量和静态成员函数使用总结
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)