0%

零散

2020年4月6日 下午11:30

strcpy和strlen

  1. Strcpy是字符串拷贝函数,原型:
    1. char *strcpy(char* dest, const char *src);
    2. 从src逐字节拷贝到dest,直到遇到’\0’结束,因为没有指定长度,可能会导致拷贝越界,造成缓冲区溢出漏洞,安全版本是strncpy函数。
  2. Strlen函数是计算字符串长度的函数,返回从开始到’\0’之间的字符个数。

全局变量和静态全局变量的区别

关于int、short int、long int、long long 的区别

关于int、short int、long int、long long 的区别_C/C++_Adrianna的专栏-CSDN博客

  1. 在标准中,并没有规定long一定要比int长,也没有规定short要比int短。
  2. 标准是这么说的:长整型至少和整型一样长,整型至少和短整型一样长。
    1. short int 2个字节
    2. int 2/4字节
    3. long 4/8字节
    4. long long 8字节

从双刃剑的角度去总结
C++中类的(static)静态成员变量与(static)静态成员函数_C/C++_年少轻狂,幸福时光-CSDN博客
static能怎样,不能怎样

typedef vs define

C typedef | 菜鸟教程

  • #define 是 C 指令,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同:
  • typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。
  • typedef 是由编译器执行解释的,#define语句是由预编译器进行处理的。

++i和i++的实现

  1. ++i 实现:
    1
    2
    3
    4
    5
    int&  int::operator++()
    {
    *this +=1
    return *this
    }
  2. i++ 实现:
    1
    2
    3
    4
    5
    6
    const int int::operatorint
    {
    int oldValue = *this
    ++(*this);
    return oldValue;
    }

类型转换

C++进阶–类型转换,你看我就够了 - 简书

  1. C++风格的强制转换其他的好处是
    1. C++中风格是static_cast(content)。C++风格的强制转换其他的好处是,它们能更清晰的表明它们要干什么。程序员只要扫一眼这样的代码,就能立即知道一个强制转换的目的。
  2. reinterpret_cast:重解析类型转换
    • 可以用于任意类型的指针之间的转换,对转换的结果不做任何保证
  3. dynamic_cast:
    • 这种其实也是不被推荐使用的,更多使用static_cast,dynamic本身只能用于存在虚函数的父子关系的强制类型转换,对于指针,转换失败则返回nullptr,对于引用,转换失败会抛出异常
    • 可以动态的来判断当前对象的真实类型
  4. const_cast:
    • 对于未定义const版本的成员函数,我们通常需要使用const_cast来去除const引用对象的const,完成函数调用。
    • 另外一种使用方式,结合static_cast,可以在非const版本的成员函数内添加const,调用完const版本的成员函数后,再使用const_cast去除const限定。
  5. static_cast:
    • 能使用隐式转换的地方,均可以使用static_cast转换
    • 如果类型不兼容,使用static_cast编译检查,会报错,不用等到运行阶段

说说你了解的RTTI

运行时类型检查,在C++层面主要体现在dynamic_cast和typeid,VS中虚函数表的-1位置存放了指向type_info的指针。对于存在虚函数的类型,typeid和dynamic_cast都会去查询type_info

struct和class的区别

  1. 默认的继承访问权:【继承下】
    1. class默认的是private,strcut默认的是public。
    2. 当然,到底默认是public继承还是private继承,取决于子类而不是基类。意思是,struct可以继承class,同样class也可以继承struct,那么默认的继承访问权限是看子类到底是用的struct还是class。
  2. 成员变量默认访问权限:【非继承下】
    1. struct作为数据结构的实现体,它默认的数据访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的。
  3. 有代码实验:【C++】struct和class的区别_C/C++_alidada_blog的博客-CSDN博客

C++中可以定义引用数据成员吗?

C/C++ - 类中成员变量是引用_C/C++_lazyq7的博客-CSDN博客

  1. 所有的引用自带要求,并不一定是在类中:
    1. 引用在定义时必须初始化,否则编译时便会报错。
  2. 根据1,我们可以推得在类中,如何使用引用数据成员:
    1. 构造函数:
      1. 引用类型的成员变量的类,不能有缺省构造函数
      2. 不能直接在构造函数里初始化,必须用到初始化列表
        1. 默认构造函数没有对引用成员提供默认的初始化机制,也因此造成引用未初始化的编译错误。