c++知识点总结2

1.int * const p 与 const int *p的区别

int *const p:常量指针,p是一个常量类型的指针,不能修改这个指针的指向,但是这个指针所指向地址上的值可以改变

const int *p:指向常量的指针,定义了一个指针指向一个常量,不能通过指针来修改这个指针所指向的值

2.抽象类的派生类实例化的必要条件是什么?

所有的纯虚函数都要被实现,有一个未实现派生类都不能实例化

3.strcpy vs strncpy 用法与区别

strcpy:函数原型为char *strcpy(char *dest,const char *src),如果参数dest所指的内存空间不够大,可能会造成缓冲溢出的错误情况。。此函数还有一个特点,就是它在把字符串b拷贝到字符串a的时候,会在拷贝的a字符串的末尾加上一个\0结束标志。

strncpy:函数原型为:char *strncpy(char *dest,const char *src ,size_t n),strncpy会将参数src字符串拷贝前n个字符至参数dest所指的地址。

strncpy的正确用法:

strncpy(dest, src, sizeof(dest));
dest[sizeof(dest)-1] = ‘\0’;

a.size一定要用sizeof(dest)或sizeof(dest)-1,不可误用sizeof(src).
b.手工填0. 务必要把dest的最后一个字节手工设置为0. 因为strncpy仅在src的长度小于dest时,对剩余的字节填0.
c.性能问题。当dest长度远大于src时,由于strncpy会对多余的每个字节填0,会有很大的性能损失。
d.返回值。strncpy返回dest,因而无法知道拷贝了多少个字节。

4.构造函数初始化使用初始化列表

初始化类的成员有两种方式,一是使用初始化列表,二是在构造函数体内进行赋值操作。 
主要是性能问题,对于内置类型,如int, float等,使用初始化类表和在构造函数体内初始化差别不是很大,但是对于类类型来说,最好使用初始化列表,为什么呢?使用初始化列表少了一次调用默认构造函数的过程,这对于数据密集型的类来说,是非常高效的。

必须使用初始化列表的情况:

a.常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面 
b.引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面 
c. 没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化

所以一个好的原则是,能使用初始化列表的时候尽量使用初始化列表.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值