选择题OJ

在(函数代码少、频繁调用 )情况下适宜采用 inline 定义内联函数

内联函数在编译时,类似宏替换,使用函数体 替换调用处的函数名,因此适合代码较少调用较多的函数。

对象是指一块能够存储数据并具有某种类型的内存空间4

指针是对象而引用不是

有效的迭代器指向某个元素,或者容器尾元素的下一个位置;其余的都是无效。

如果容器为空,begin和end返回同一个迭代器,都是尾后迭代器

—> 箭头运算符 = 解引用+成员访问s

两个指针相减的结果 ptrdiff_t的标准库类型,和size_t一样,都是定义在cstddef头文件中的机器相关的类型,它是带符号类型

C++早期版本允许结果为负值的商向上/向下取整,C++11新标准规定商一律向0取整(切除小数)

m % -n = m%n -m % n = -(m%n)

移位:令左侧的对象的内容按照右侧运算对象的要求移动指定位数,然后将移动的(可能提升)左侧运算的拷贝作为求职结果,右侧不能为负,且严格小于结果位数,否则产生未定义行为。

左移直接补0

(右移)
右移操作符有以下两种方案:

1.逻辑右移 左边补0,右边丢弃。

2.算数右移 左边移入的位由原先该值的符号位决定,符号位1则移入1,为0则移入0。

3.选择与联系
算术左移与逻辑左移是相同的,它们只有在右移时不相同,而且条件为操作数为负值。

标准说明无符号值执行的所有移位操作都是逻辑移位,

但对于有符号值,采用哪种取决于编译器。

∴ 有符号数的右移操作符是不可移植的。

在 c++ 语言中,对函数参数默认值描述正确的是(在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值)

对函数参数设定了默认参数后,为了防止参数匹配发生歧义,后边的参数也必须要设置成默认的。

关于函数的默认参数:

  1. 默认参数只能放在函数声明处或者定义处,能放在声明处就放在声明处 ;

  2. 如果某个参数是默认参数,那么它后面的参数必须都是默认参数,

    因为调用函数传递参数的顺序是从左往右的,也即默认参数后的参数必须是默认参数;

  3. 不要重载一个带默认参数的函数,否则编译器会不清楚你要调用的是重载前还是重载后的函数。

下列静态数据成员的特性中,错误的是(静态数据成员不是所有对象所共有的)

  1. 静态数据在类内声明,类外定义,初始化
  2. 静态数据成员为该类所有对象所共享的
  3. 使用<类名> + 作用域解析符::进行访问, 使用static进行声明 ,只能访问类中的 静态数据成员

ASCLL 0-48 A-65 a-97

整型给浮点,如果正数所占空间超过了浮点数的容量,精度可能会损失

当赋给无符号类型一个超过他所标识的范围,结果是初始值堆无符号类型数值总数取模后的余数。

例如:-1给8比特大的unsigned char 结果 -1 mol 256 = 255

当赋给带符号类型一个超出它所表示的范围,结果未定义的。因此,程序可能继续工作、可能膨蝰,也可能生成垃圾数据

派生类一般都用公有派生

对基类成员的访问必须是无二义性的

赋值兼容规则是指派生类对象可以当作基类对象使用,只要存在继承关系,所以单继承/多继承都适用

char *szX=”abc”;
char *szY=”abc”;
//szX与szY指向同一个地址

c++有一种 copy on write(写时复制)机制,szX 和szY所指内容是一样的,没必要分配两个空间,浪费空间,但是当我们要修改其中一个时,系统才为我们复制一份,此时一个指针会指向新拷贝的那一份,这样对一个的修改就不会影响到另一个实体,

int a[]={
   1,2,3,4};
int *b=a;
*b+=2;//即 *b = *b +2 b指向了a[0],a[0]=3
*(b+2)=2;//即 a[2]=2
b++; //b指向了a[1]
printf(%d,%d\n”,*b,*(b+2));//a[1]=2; a[3]=4
struct A{
    
    unsigned a : 19; 
    unsigned b : 11; 
    unsigned c : 4; 
    unsigned d : 29; 
    char index; 
};sizeofstruct A)的值为(16//位域/位段 是指信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。

分为以下四行:
   19+11 < 32                              
     4    32-30<4,存不下4                         
    29     存不下29                          
    8   
    一共四行,每行4个字节,所以结构体的大小是4*4=16个字节(sizeof返回值以字节为单位) 
    
//c++任何引用都必须指向一个实例
//内联函数不能是虚函数  
//原因:虚表机制需要一个真正的函数地址,而内联函数展开以后,就不是一个函数,而是一段简单的代码(多数C++对象模型使用虚表实现多态,对此标准提供支持),可能有些内联函数会无法内联展开,而编译成为函数。
//定义在Class声明内的成员函数默认是inline函数

a. 成员函数被重载的特征:

( 1 )相同的范围(在同一个类中);

( 2 )函数名字相同;

( 3 )参数不同; 函数类型可以不同,参数类型或个数不同

( 4 ) virtual 关键字可有可无。

b. 覆盖是指派生类函数覆盖基类函数,特征是:

​ (重写即覆盖,子类的虚函数重写(覆盖)基类的虚函数 )

( 1 )不同的范围(分别位于派生类与基类);

( 2 )函数名字相同;

( 3 )参数相同;

( 4 )基类函数必须有 virtual 关键字。

c.“ 隐藏 ” 是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

( 1 )如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无 virtual 关键字,基类的函数将被隐藏(注意别与重载混淆)。

( 2 )如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有 virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)

字符串的结束标志是0和’\0’,注意’0’不是结束标志.

二维数组初始化必须指定第二个[],第一个[]是行号,也就是几个花括号

由多个源文件组成的C程序,经过编辑、预处理、编译、链接等阶段会生成最终的可执行程序。下面哪个阶

段可以发现被调用的函数未定义?

链接

List封装了链表,Vector封装了数组, 只有dqeue和vector是连续存储的

list和vector得最主要的区别在于: vector使用连续内存

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值