C++重温点滴

1.缘由

工作需要,再次接触C++项目,上次、上上次接触还是2014年上半年和2012年下半年了>_<
有感要记录下这个过程,一方面避免印象逐渐淡化导致日后重复造轮子,另一方面也想做一些分享。

2.方向

工欲善其事必先利其器。对待问题要将其抽象化、泛化为一般性问题,突出问题的特点后才便于查找解决。

3.点滴记录

161121

WinMain几问:

  1. WinMain的特点是?
  2. 和main函数的区别和联系是?
  3. 哪些情况下会用到WinMain?
  4. 函数定义是?

pragma warning的作用?

map型数据结构

说起map,首先要介绍下“关联容器”。关联容器是按关键字来存储的。map就是一种关联容器。关联容器有:

  • map 字典(key-value对)
  • set 集合(与列表做区分,集合中不会有多个相同的元素)
  • multimap
  • multiset
  • unordered_map
  • unordered_set
  • unordered_multimap
  • unordered_multiset

(单看数据结构名有种python的感觉)

# include <map>
std::map<int, FILE*> fileMap; // 用int做key,构造一个文件映射

throw

通过throw语句,我们可以raise一个异常
throw时可以接一些方法,例如stdexception里的:

throw runtime_error("It's error msg~");

typedef

类型别名,用于给数据结构一个直观的名字(说不直观的童鞋习惯就好~)

//老式风格
typedef int filekey;

//新式风格(cpp 11)
using filekey = int;

namespace

多个库开发时可能会出现namespace pollution,前人有通过其很长的名字(库前缀)来避免,然而也是蛋疼。namespace就提供了一种控制手段。

namespace cpp_test {
    class CTest {
        /* ... */
    };
}

疑点:namespace中重载运算符有啥特点,使用时需要注意什么?

namespace可以不连续

pragma

一个有点复杂的预处理指令,用于设定编译器状态或指示编译器完成一些特定动作。编译指令对每个操作系统是不同的,而且对每个编译器也不同

// message: 编译时可以打印出来咯
#ifdef _X86
#pragma message("_X86 macro activated!")
#endif

// code_seg: 设置代码存放的代码段,开发驱动程序使用
#pragma code_seg(["section-name"[,"section-class"]])

// once: 本文件只编译一次。和ifdef那种套路一样,但后者跨平台性能更好(毕竟pragma对编译器有要求)
#pragma once

// warning: 对警告进行处理
#pragma warning(disable:450734)//不显示4507和34号警告信息
#pragma warning(once:4385)//4385号警告信息仅报告一次
#pragma warning(error:164)//把164号警告信息作为一个错误。
// 一个常用套路
#pragma warning(push)
#pragma warning(disable:4705)
#pragma warning(disable:4706)
#pragma warning(disable:4707)
// ...
#pragma warning(pop)
// 在这段代码的最后,重新保存所有的警告信息

vs项目目录中的名词

结构

  • 解决方案
  • 项目
  • 筛选器
  • 文件

多项目的意义:每个项目被编译为一个程序集,把相关的项目放入同一个解决方案,便于组织项目文件、共享组件和源代码、批量编译和测试。

运算符new/delete的重载

自己担负起控制内存分配的职责

161123

void指针

int val = 5;
int *p = nullptr; // 等价于0
p = &val;
void *x = p;

void指针主要用于函数的输入输出,及void指针间相互赋值

基本数据类型与类型修饰符

int、double这些属于基本数据类型,*、&这些属于类型修饰符。

int *p, val;
int* p, val;
// 二者是等价的,都是只有p为int型指针

int *a = nullptr;
int *&r = a; // r是a的引用。阅读顺序从右到左
int **p = &a; // p是指向a的指针

const限定符

默认只在单文件内有效。需要多文件共享需要声明为extern

const int pi = 3.14;
extern const int a = 1;

int *const p1; // 顶层const,指针本身是个常量
const int *p2; // 底层const,指针所指向的对象是个常量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值