前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记录C++遗忘项

记录C++遗忘项

原创
作者头像
Rock_Lee
修改2021-01-28 16:04:47
5770
修改2021-01-28 16:04:47
举报
文章被收录于专栏:知识碎片知识碎片

extern那些事

  1. extern "C" 是放在.cpp文件中,而不是放在.c中,不然会有编译错误。放在.c的情况都是加上了#ifdef __cplusplus#endif即用来识别当前文件用C++进行编译,所以才不会报错。

static那些事

  1. 静态成员变量未赋值的存放在bss段,赋值过就放在data段.
  2. 类的静态数据成员如成员函数或者成员变量,不依赖于类对象本身,即类中的静态数据成员由对象共享。因此静态变量不能使用构造函数初始化;静态函数仅能访问静态数据或静态成员函数。
  3. 静态类对象和静态对象(变量)一样,生命周期是贯穿整个程序的生命周期。

const那些事

  1. 类中使用const, 只用常成员函数才能操作常量或者常函数;const对象只能访问const成员函数;
  2. const变量默认为非extern,所以要使得const 变量在其他文件中访问,必须在文件中显示地指定它为extern

this 那些事

  1. 在类的非静态成员函数中返回类对象本身使用return *this;
  2. this指针本身是const指针,即class A的非const成员函数中this指针类型为A *const,const成员函数则为const A *const.

inline

  1. inline顾名思义 expanded in line,即以代码膨胀(复制)为代价,省去了函数调用的开销,从而提高函数的执行效率;
  2. inline要与函数定义放在一起,即inline是用于实现的关键字,而不是用于声明的关键字

sizeof

  1. 空类的大小为1,因为Cpp要求每个实例在内存中有独一无二的地址,计算机中的最小内存为1字节;
  2. 对于包含虚函数的类,不管有多少个虚函数,也只有一个虚指针vptr的size,因为同一个类的不同实例共用同 一份虚函数表

volatile

  1. volatile是一种类型修饰符,使用volatile声明的类型变量都会被意外的更改,编译器不应对这样的对象进行优化。
  2. volatile声明的变量,每次访问都必须从内存中取出(没有被 volatile 修饰的变量,可能由于编译器的优化,从 CPU 寄存器中取值)
  3. const 可以是 volatile (如只读的状态寄存器)

assert

  1. 断言处理主要检查逻辑上不可能的情况
  2. 忽略断言可以在#include<assert.h>前加上 #define NDEBUG

可重入函数与线程安全

  1. 可重入即表示可以重复进入,意味着这个函数可以被中断,因此函数内部应该除了使用自己栈上的变量外部依赖任何环境,如果必须要访问全局变量,则一定要注意实施互斥手段。
  2. 判断一个函数是不是可重入函数,在于判断其能否可以被打断,打断后恢复运行能够得到正确的结果。(打断执行的指令序列并不改变函数的数据) 判断一个函数是不是线程安全的,在于判断其能否在多个线程同时执行其指令序列的时候,保证每个线程都能够得到正确的结果。

作用域解析运算符

  1. :: scope resolution operator 首先先这个符号在C中并不支持
  2. 用于命名空间或类名后,用于静态成员,用于作用域枚举

enum

  1. 传统枚举可能出现的问题有3:a.作用域不受限,导致全局冲突; b.会隐式转换为int;c.枚举的实际类型不能明确指定(比如指定为字符'a',最后会隐式转为ASCII码97)
  2. 现代处理方式: a.使用struct(或class public)进行枚举封装,不用namespace是担心封闭性不高;(解决上述问题1.a) b.c++11中enum class(解决上述所有问题)
  3. enum在C++类中妙用:类中的枚举常量,可以避免#define MAXSIZE 100这样全局的宏常量处理,可能问为啥不用const,因为const数据成员只能在某个对象的生命周期内是常量,不同的对象无法保证是一样的。
代码语言:c++
复制
/*2.b*/
enum class Color3:char;  // 前向声明

// 定义
enum class Color3:char 
{
    RED='r',
    BLUE
};
char c3 = static_cast<char>(Color3::RED);
/*3*/
class Person{
public:
    typedef enum {
        BOY = 0,
        GIRL
    }SexType;
};
//访问的时候通过,Person::BOY或者Person::GIRL来进行访问。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • extern那些事
  • static那些事
  • const那些事
  • this 那些事
  • inline
  • sizeof
  • volatile
  • assert
  • 可重入函数与线程安全
  • 作用域解析运算符
  • enum
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档