C++

1.“\n”和endl的区别?

std::endl 输出一个换行符,并立即刷新缓冲区。

对于有输出缓冲的流(例如cout、clog),如果不手动进行缓冲区刷新操作,将在缓冲区满后自动刷新输出。

对于无缓冲的流(例如标准错误输出流cerr),刷新是不必要的,可以直接使用 '\n'。

 

2. auto和decltype

 

3.类

class是 C++ 中新增的关键字,专门用来定义类。类名的首字母一般大写

public也是 C++ 的新增关键字,它只能用在类的定义中

 类只是一个模板(Template),编译后不占用内存空间,所以在定义类时不能对成员变量进行初始化,因为没有地方存储数据。只有在创建对象以后才会给成员变量分配内存,这个时候就可以赋值了。

Student *pStu = &stu;

Student *pStu = new stu;

在栈上创建出来的对象都有一个名字,比如 stu,使用指针指向它不是必须的。但是通过 new 创建出来的对象就不一样了,它在堆上分配内存,没有名字,只能得到一个指向它的指针,所以必须使用一个指针变量来接收这个指针,否则以后再也无法找到这个对象了,更没有办法使用它。

栈内存是程序自动管理的,不能使用 delete 删除在栈上创建的对象;堆内存由程序员管理,对象使用完毕后可以通过 delete 删除。在实际开发中,new 和 delete 往往成对出现,以保证及时删除不再使用的对象,防止无用内存堆积。

 有关内存的讲解:http://c.biancheng.net/cpp/u/c20/

 

4.const

C++ 对 const 的处理少了读取内存的过程

const int m = 10;
int n = m;

在C语言中,编译器会先到 m 所在的内存取出一份数据,再将这份数据赋给 n;而在C++中,编译器会直接将 10 赋给 m,没有读取内存的过程。

 

5.struct和class的区别

class中默认成员访问权限是private,而struct的默认访问权限是public

class中默认继承方式是private,而struct的默认继承方式是public

struct更适合看成是一个数据结构的实现体,class更适合看成是一个对象的实现体。

 

6. C和C++的区别

c语言编程单位是函数,语句是程序的基本单元。而C++语言的编程单位是类。

 

7.进程和线程的区别

进程是资源分配的最小单位,线程是程序执行的最小单位。

一个进程中可以包括多个线程,一个进程至少包括一个线程。

进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束

进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。

但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

 

8.类型转换

  • static_cast:静态转换。用于两个相关类型的转换。基本数据类型转换,enum,struct,int,char,float等,常用。
  • reinterpret_cast:用于不同类型的指针之间的转换,或者指针和整数之间的转换。
  • const_cast:仅去除const ,一般用不上。
  • dynamic_cast:动态转换。用于多态类型的转换。
posted @ 2018-04-03 15:25  番茄玛丽  阅读(213)  评论(0编辑  收藏  举报