C++学习笔记08

来源:互联网 发布:linux 开机卡在进度条 编辑:程序博客网 时间:2024/06/05 05:32

1:union和struct的区别:什么是联合(union)?
union是一种特殊的类,也是一种构造类型的数据结构。在一个union内可以定义多种不同的数据类型, 一个被说明为该union类型的变量中,允许装入该union所定义的任何一种数据,这些数据共享同一段内存,已达到节省空间的目的(还有一个节省空间的类型:位域)。 这是一个非常特殊的地方,也是union的特征。另外,同struct一样,联合默认访问权限也是公有的,并且,也具有成员函数。

union与结构的区别? union与“结构”有一些相似之处。但两者有本质上的不同。在结构中各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和(空结构除外,同时不考虑边界调整)。而在union中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。应该说明的是, 这里所谓的共享不是指把多个成员同时装入一个联合变量内, 而是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值。

一般情况下用不到,对于一些嵌入式设备,内存空间十分稀缺才可能用到。

2:在c++程序中调用被C编译器编译后的函数,为什么要加extern“C”?
C++语言支持函数重载,C语言不支持函数重载,函数被C++编译器编译后在库中的名字与C语言的不同。假设某个函数原型为:
void foo(int x, inty);
该函数被C编译器编译后在库中的名字为: _foo , 而C++编译器则会产生像: _foo_int_int 之类的名字。为了解决此类名字匹配的问题,C++提供了C链接交换指定符号 extern “C”。

3:c++怎样让返回对象的函数不调用拷贝构造函数?
拷贝构造函数前加 “explicit” 关键字,因为普通构造函数能够被隐式调用,而添加explicit的构造函数只能被显式调用。
在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换,可以参考这个链接。

原创粉丝点击