面试问题①:内联函数、工程文件格式、友元无this指针、迭代器失效、import、逗号表达式、double/float不能进行位运算

1 内联函数、类内定义与类外定义。

内联函数 inline
程序在编译器编译的时候,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体进行替换,而对于其他的函数,都是在运行时候才被替代。
本质是空间换时间的操作。
特点:

  1. 一般是1-5行的小函数
  2. 不允许循环、开关、递归语句。
  3. 内联函数的定义必须出现在内联函数第一次调用之前
  4. 类结构中所在的类说明内部定义的函数是内联函数——类内定义的,虚函数不会被内联。
  5. 关键字inline必须与函数定义放在一起才能使函数成为内联。
  6. inline说明对编译器来说只是一种建议,编译器可以忽略。

虚函数与内联:在不体现多态的时候可以内联,因为虚函数在运行时实现多态,内联在编译时替换。

类内定义
将成员函数的函数体写在类的内部的方式称为类内定义。
在类定义中的定义的函数都是内联函数,即使没有使用 inline 说明符。

类外定义
分为两种形式:
第一种,通过类名::的方式定义。

在这里插入图片描述
第二种:
分文件定义,头文件(.h)中申明了类中的所有的数据成员和成员函数,cpp文件中进行定义,注意一定要使用include。
注意不能在.h文件中重复定义,否则会造成重复。
在这里插入图片描述
2 工程文件格式-头文件(.h文件)、cpp文件、main.cpp文件

工程文件格式:头文件声明类及其成员;cpp文件#include<.h>文件,定义类; main文件#include<.h>文件,调用函数。

头文件
.h文件一般包含

#ifndef CAR_H
#define CAR_H
...
#endif

这是为了防止重复编译,名称一般和头文件名字相同。

4 友元函数没有this指针

在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。
如果Class Point; this可以理解为Point*类型

友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针。

5 迭代器失效

vector是顺序存储的,只有在尾部插入才不会导致迭代器失效,在头部插入或者中间插入都会导致插入的部位以及其后的所有迭代器都失效;

map是映射,key和value是一一对应的,在内存中是零散存在的,迭代器通过key找到value,无论怎么插入都不会让迭代器失效,当然删除只会使得被删除元素的迭代器失效

6 #import

#import是#include的替代指令,防止重复引用.
#import 确定一个文件只能被导入一次,这使你在递归包含中不会出现问题。

7 括号表达式使用最后一个表达式

=优先级 高于 逗号

b = (a = 3*5, a*4, a*5);
相当于b = (15, 60, 75)
b == 75; a == 15;

b = (a = 3*5, a*4, a*5);
相当于b = 15, 60, 75
b == a == 15;

8 double/float不能进行位运算

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值