牛客 C++刷题day33,34

1.一个数组只能进行初始化而不能进行赋值,但可以逐个赋值。这个和整体赋值的说法是有出入的。

2.一定要分清操作符和函数的区别,比如malloc就是函数而++和sizeof就是操作符。

3.构造函数函数名必须和类名相同,这一条就不符合运算符重载的要求。运算符重载的格式为:返回值类型 operator(运算符) (参数)。

4.vector erase以后,itor已经指向下一个元素了,此时不应该执行itor++,这点要注意。 

5.柔性数组

1、什么是柔性数组?

柔性数组既数组大小待定的数组, C语言中结构体的最后一个元素可以是大小未知的数组,也就是所谓的0长度,所以我们可以用结构体来创建柔性数组。

2、柔性数组有什么用途 ?

它的主要用途是为了满足需要变长度的结构体,为了解决使用数组时内存的冗余和数组的越界问题。

3、用法 :在一个结构体的最后 ,申明一个长度为空的数组,就可以使得这个结构体是可变长的。对于编译器来说,此时长度为0的数组并不占用空间,因为数组名

本身不占空间,它只是一个偏移量, 数组名这个符号本身代 表了一个不可修改的地址常量 (注意:数组名永远都不会是指针! ),但对于这个数组的大小,我们

可以进行动态分配,对于编译器而言,数组名仅仅是一个符号,它不会占用任何空间,它在结构体中,只是代表了一个偏移量,代表一个不可修改的地址常量!

6.scanf 和printf不同,它的写入顺序就是从左到右的参数。不像printf从右到左考虑参数。

7.

关于C++的异常处理,下列说法正确的有

 

正确答案: B   

函数指针与该指针所指的函数必须具有相同的noexcept异常说明
异常对象的初始化是通过拷贝初始化进行的
若析构函数中含有throw语句,而其声明中不包含noexcept(false)的显式声明,则编译无法通过
异常对象和异常声明的匹配规则中可以进行类型转换,遵循函数调用的形参、实参的转换规则

 

  • A项,函数指针与该指针所指的函数必须具有一致的noexcept异常说明,而非相同。特别的,隐式声明为noexcept(false)的函数指针可以指向noexcept(true)的函数,A错误。
  • C项,编译器并不会在编译时检查noexcept声明,编译可以通过,C错误。
  • D项,恰恰相反,在异常声明的匹配规则中,绝大多数类型转换都不被允许,除了以下3种例外:1)允许从非常量到常量的转换;2)允许派生类到基类的转换;3)数组转数组元素指针,函数转函数指针。除此之外,包括标准算术类型和类类型转换在内,其他的转换规则不能在异常catch匹配中使用,D错误。

8.this指针并不是保证基类保护成员在子类中可以被访问。this指针指的是本类(当前类)。

posted @ 2019-10-05 12:40  Tonarinototoro  阅读(131)  评论(0编辑  收藏  举报