C++避坑指南

论坛 期权论坛 期权     
腾讯技术工程   2019-6-30 05:52   2353   0






导语:如果,将编程语言比作武功秘籍,C++无异于《九阴真经》。《九阴真经》威力强大、博大精深,经中所载内功、轻功、拳、掌、腿、刀法、剑法、杖法、鞭法、指爪、点穴密技、疗伤法门、闭气神功、移魂大法等等,无所不包,C++亦如是。

C++跟《九阴真经》一样,如果使用不当,很容易落得跟周芷若、欧阳锋、梅超风等一样走火入魔。这篇文章总结了在学习C++过程中容易走火入魔的一些知识点。为了避免篇幅浪费,太常见的误区(如指针和数组、重载、覆盖、隐藏等)在本文没有列出,文中的知识点也没有前后依赖关系,各个知识点基本是互相独立,并没有做什么铺垫,开门见山直接进入正文。

目录
1 函数声明和对象定义
2 静态对象初始化顺序
3 类型转换
3.1 隐式转换
3.2 显示转换
4 inline内联
5 名称查找
5.1 受限名称查找
5.2 非受限名称查找
6 智能指针
6.1 std::auto_ptr
6.2 std::shared_ptr
6.3 std::unique_ptr
7 lambda表达式

1 函数声明和对象定义
对象定义写成空的初始化列表时,会被解析成一个函数声明。可以采用代码中的几种方法定义一个对象。
  1. //这是一个函数声明
复制代码
  1. //不是一个对象定义
复制代码
  1. string foo();
复制代码
  1. [/code][code]
复制代码
  1. //函数声明
复制代码
  1. string foo(void);
复制代码
  1. [/code][code]
复制代码
  1. //对象定义几种方法
复制代码
  1. string foo;
复制代码
  1. string foo{ };//c++11
复制代码
  1. string *foo = new string;
复制代码
  1. string *foo = new string();
复制代码
  1. string *foo = new string{ };//c++11
复制代码
(左滑可以查看全部代码,下同)

2 静态对象初始化顺序
在同一个编译单元中,静态对象的初始化次序与其定义顺序保持一致。对于作用域为多个编译单元的静态对象,不能保证其初始化次序。如下代码中,在x.cpp和y.cpp分别定义了变量x和y,并且双方互相依赖。
  1. //x.cpp
复制代码
  1. extern int y;
复制代码
  1. int x = y + 1;
复制代码
x.cpp中使用变量y来初始化x

  1. //y.cpp
复制代码
  1. extern int x;
复制代码
  1. int y = x + 1;
复制代码
y.cpp中使变量x来初始化y

  1. //main.cpp
复制代码
  1. extern int x;
复制代码
  1. extern int y;
复制代码
  1. int main()
复制代码
  1. {
复制代码
[code]    cout
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:5
帖子:1
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP