c++知识问答1-创新互联
1、C++关键字extern介绍,为什么被C编译其编译过的函数,需要加extern "C"?
发展壮大离不开广大客户长期以来的信赖与支持,我们将始终秉承“诚信为本、服务至上”的服务理念,坚持“二合一”的优良服务模式,真诚服务每家企业,认真做好每个细节,不断完善自我,成就企业,实现共赢。行业涉及成都发电机租赁等,在重庆网站建设、成都营销网站建设、WAP手机网站、VI设计、软件开发等项目上具有丰富的设计经验。解析:extern定义为:声明外部变量【在函数或者文件外部定义的全局变量】;该关键字告诉编译器,其声明的函数和变量可以在本模块或者其他模块中使用。
通常:在模块的头文件中对本模块提供给其他模块引用的函数和全局变量以关键字extern声明。
extern ”C“ 是连接申明,被它声明表示编译器处理代码时候按照C语言规则进行编译;由于C语言是面向过程,不支持类似于C++的重载特性;所以对于C和C++混合代码中,需要对C语言进行特殊标定,才可以进行混合编译。
2、C/C++语言的特点?
解析:C语言:是一种面向过程的结构化语言;考虑的是如何通过一个函数或者过程实现由输入获得输出的过程;其可以直接访问内存物理地址;可用于硬件/应用软件开发。
C++语言:是一种面向对象的语言,基于类、对象和继承,考虑的是如何构造一个对象模型,让这个模型能够复合实际问题,从而通过模型对象来实现输出或者控制。
3、const和constexpr介绍
解析:const在C/C++中可以定义const常量,也可以修饰函数形参和返回值。被const修饰的东西可以起到强制保护,防止意外改变,增强程序健壮性。可以使用const_cast
指针常量:const int* p = new int(1); //指向数据为常量
常量指针:int *const p = new int(2); //指针本身为常量
constexpr是C++11新添加的关键字,用于修饰常量表达式,使其在编译期进行计算;和const相比:const表示”只读“的语义,constexpr表示”常量“的语义。
constexpr变量:可以将变量声明为constexpr,让编译器来判断是否为一个常量表达式;如果用constexpr声明一个指针,constexpr仅对指针有效,对它所指数据无关;
constexpr函数:指能用常量表达式的函数;其返回类型和所有形参类型都是字面值类型,且函数体内有且仅有一条return语句返回;
constexpr构造函数:构造函数不能说是const,但字面值常量类构造函数可以是constexpr。该构造函数必须有一个空的函数体,所有的成员变量初始化放到初始化列表中进行。
总结:
1.const用于修饰不能被修改的对象,但const对象的值通常在程序运行期间才能确定
2.constexpr用于修饰常量表达式或可返回常量表达式的constexpr函数,在编译时能确定值。
3.constexpr函数都是inline函数。
4、volatile关键字介绍
定义:该关键字与const对立,也是类型修饰符。主要用于修饰随时变化的变量,与该变量相关的运算不要进行优化编译。每次直接从内存中加载该变量的最新数据。
使用场合:在中断服务程序和CPU相关寄存器的定义中使用。
5、sizeof的使用总结
解析:sizeof计算在栈中分配的内存大小;sizeof是一种操作运算符,编译期获取值,strlen是函数,需要运行期才进行计算。
注意点:1)对于结构体对象取长度,会存在对齐补位操作;2)对函数使用sizeof,在编译阶段会被函数的返回值类型所代替;
6、指针和引用的区别
解析:指针和引用均提供了间接操作对象的功能。
1)指针存放某个对象的地址,其本身也是变量,也拥有地址;所以可以有指向指针的指针,指针可变,包括其所指的地址的改变和指向地址所存数据的改变;
2)引用是变量别名,声明时候必须初始化,之后建立绑定关系,不能改变;
3)不存在指向空值的引用,但是存在指向空值的指针;
4)指针之间存在类型转换,引用分为const和非const引用,非const引用只能和同类型的对象绑定,const引用可以绑定到不同但相关的对象或者右值。
7、指针和数组的区别
解析:1)数组可以全局数据域建立,也可以在栈上被创建;指针可以随时指向任意类型的内存块;2)sizeof可以计算出数组的容量,但是sizeof指针,只能获取指针的大小;3)数组作为函数的参数进行传递时候,该数组自动退化为同类型的指针。
8、空指针、野指针、悬垂指针和void指针
解析:空指针:指赋值为NULL或者0的指针;
野指针:指声明后未初始化的指针;
悬垂指针:指经过delete释放后,继续指向已被释放内存地址的指针;
void指针:无类型指针,被称为通用指针或者泛指针,也被称为万能指针;使用时候需要恢复其指向对象类型。
9、malloc/free和new/delete介绍
解析:malloc/free为标准库函数,new/delete是C++运算符,可以被重载。
对于内置数据类型,两者可以通用;malloc申请内存后不会初始化,在栈上申请,返回void类型指针,使用时候还需要进行类型转换;new申请内存时候有默认初始化,也可以指定初始化,在堆上申请内存,返回具体类型的指针。
对于c++中类对象初始化时候,由于需要调用构造函数,释放时候需要调用析构函数,所以需要用new/delete对malloc/free进行封装,实现类对象的创建。
10、智能指针介绍
解析:智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用域时,自动地销毁动态分配的对象,防止内存泄漏。智能指针的核心实现技术是引用计数,每使用它一次,内部引用计数加1,每析构一次内部的引用计数减1;减少为0时,删除所指向的堆内存。
C++11中提供了三种智能指针,引用头文件为
std::shared_ptr:共享的智能指针
std::unique_ptr:独占的智能指针
std::weak_ptr:弱引用的智能指针,它不共享指针,不能操作资源,用来监视shared_ptr。
详解可以参照连接(87条消息) c++11之智能指针_峰上踏雪的博客-博客_智能指针
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
本文名称:c++知识问答1-创新互联
网站路径:http://scyanting.com/article/eeheg.html