1入门基础知识

1.C++98关键字

面试:C++语言中一共有多少个关键字

在C++98中有63个关键字。(在回答的时候一定要带上语言标准带上)

2.命名空间

2.1 概念

实际就是一个新的作用域,用来解决命名冲突问题

2.2 定义方式

方式一:

namespace N1 (变量、函数、类)

方式二:

命名空间可以嵌套定义

方式三:

在同一个工程中,可以定义多个相同名称的命名空间——编译器最终会将相同名称的命名空间进行合并

2.3 成员使用方式

方式一:

命名空间名字 :: 成员名字

方式二:

using 命名空间名称 :: 成员名字

可以当成本文件的全局变量来使用

注意:可能会存在冲突,如果冲突就使用方式一进行使用

方式三:

using namespace 命名空间名称; 

使用起来方便,但是容易产生冲突

3. IO输入&输出

兼容C语言——继续使用C语言的方式来输入输出

输入:cin——istream

输出:cout——ostream

优点:使用方便,不需要格式控制,因为在istream和ostream类中,已经将所有内置类型的输入和输出都重载过。

对于自定义类型,用户可以对operator<<和operator>>()进行重载

必须重载成友元函数

ostream& operator<<(ostream& _cout , const Date& d)

{

        //使用_cout对d中的成员进行输出

        return _cout;//支持连续输出

}

istream& operator>>(istream& _cin , const Date& d)

{

        //使用_cin对d中的成员进行输入

        return _cin;//支持连续输入

}

OJ题中循环输入:

while(cin>>a>>b){

        //对接收到的数据进行处理

}

字符串:

while(getline(cin, s)){

        //对接收到的数据进行处理

}

4.缺省参数

4.1 概念

在声明和定义函数时,可以给函数参数待上一些默认值,将来在进行函数调用时,如果用户没有传递实参,则使用默认值;

例子——备胎

4.2 分类

全缺省参数:

每个参数都有默认值。

半缺省参数:

部分参数有默认值(从右往左依次给出)

4.3 注意事项

不能在声明和定义的位置同时给出。

只能从右往左依次给出。

默认值可以是:常量或者全局变量。

C语言不支持。

5. 函数重载

5.1 概念

在相同作用域和中,定义一系列:函数名相同,但是参数列表不同的函数(参数类型、参数个数、类型次序。与返回值类型是否相同无关)

例子:一词多义。

5.2 调用原理

在编译时候,编译器会对传递的实参类型进行推演,根据推演的结果选择合适的类型的重载函数进行调用。如果存在类型完全匹配的函数,则直接调用。如果参数类型不是完全匹配,则编译器会尝试进行 隐式类型转换,如果转换之后有合适 的函数可供调用,则调用,否则编译失败。

5.3 底层实原理

C语言不支持,函数名字修饰规则:只是在函数名前加_

C++支持,函数名字修饰规则:将类型信息编译到名字中

5.4 extern “C”的作用

为什么要有?

C语言和C++的编译器对函数名字修饰规则不同,在C和C++混合编译的场景中,就需要保证最终名字一致。

大多数使用在库函数的实现上。

作用:让C++编译器按照C语言的方式对代码来进行编译

5.5  补充:常见的调用约定

6. 引用

6.1 概念

别名+举例说明

6.2 特性

在定义时候必须要初始化。

引用一旦和实体结合后,再不能引用其他的实体。

一个变量可以有多个引用。

6.3 const类型引用

6.4 引用应用场景

简化代码。

作为函数参数。

作为返回值(注意:不能返回函数栈上的空间)

6.5 传值、传地址、传引用效率比较高

6.6 指针和引用的区别

从底层实现上来说,没有任何区别,编译器会将代码编译完成之后,会将引用直接转换为指针。(引用底层就是按照指针的方式实现的)

//方法一
T& -----T* const
//方法二
const T&---->const T* const

引用变量实际是会开辟空间的,空间中是引用实体的地址。

概念+特性+使用方法区分:(8条)

7. 内联函数

7.1 概念

7.2 特性4个

inline是一种以空间换时间的做法,省去调用函数的额外开销。所以代码很长或者有循环/递归的函数不适合使用作为内联函数。

inline对于编译器而言只是一个建议,编译器会自动优化,如果定义为inline的函数内有循环/递归等,编译器优化时会忽略掉内联。

inline不建议声明和定义分离,分离会导致链接错误,因为inline被展开,就没有函数地址,链接就会找不到。

7.3 内联函数和宏的区别

7.4 宏的优缺点

优点:

增强代码的复用性。

提高性能。

缺点:

不方便调试宏。(因为预编译阶段进行了替换)

导致代码可读性差,可维护性差,容易误用。

没有类型安全的检查。

你可能感兴趣的:(c++总结,开发语言)