C++深究

函数指针

double pam(int, double); // prototype
double (*pf)(int, double); // declare function pointer
pf = pam; // pf now points to the pam() function
double y = (*pf)(1, 5); // call pam() using pointer pf

内联函数

适用范围:不是递归调用的函数;函数多次被调用;

inline double square(double x) {
return x * x;
}

函数模板

// non template function prototype
void Swap(job &a, job &b);
// template prototype
temple<class T>
void Swap(T &a, T &b);
// explicit specialization for the job type
template<> void Swap<job>(job &a, job &b);

关键字decltype

int x;	double y;
decltype(x + y) xpy; // make xpy the same type as x + y

关键字explicit

作用:防止隐式转换

class A {
private:
string s;
public:
A(string _s = "") : s(_s) {}
int compare(const A& other);
}; class B {
private:
string s;
public:
explicit B(string _s = "") : s(_s) {}
int compare(const B& other);
}; int main() {
A a;
a.compare("Valid"); // Is valid to do that
B b;
b.compare("InValid"); // Is invalid to do that
return 0;
}

关键字auto

作用:自动推导变量类型

vector<int> v;
auto it = v.begin();

运算符dynamic_cast

作用:判断指针pg的类型是否被安全地转换为Superb*。如果可以,运算符将返回对象的地址,否则返回一个空指针。

class Superb : public Grand {...}
Grand *pg = new Grand;
Superb *pm = dynamic_cast<Superb*>(pg);

运算符typeid

作用:确定两个对象是否为同种类型

typeid(Grand) == typeid(*pg);

运算符const_cast

作用:删除const typename* 中的const,当且仅当指向的值的声明是非const的时候有效

void change(const int *pt, int n) {
int *pc = const_cast<int*>(pt);
*pc += n;
}
int pop1 = 38383;
change(&pop1, -103); // valid
const int pop2 = 2000;
change(&pop2, -103); // invalid

运算符static_cast

作用:可隐式转换的时候才生效

High bar;
Low blow;
High *pb = static_cast<High*>(&blow); // valid
Low *pl = static_cast<Low*>(&bar); // valid
Pond *pmer = static_cast<Pond*>(&blow); // invalid

运算符reinterpret_cast

作用:天生危险的类型转换

struct dat {short a, b};
long value = 0xaaaaaaaa;
dat *pd = reinterpret_cast<dat*>(&value); // valid

智能指针auto_ptr

作用:离开作用域的时候自动调用析构函数释放动态内存

void function() {
auto_ptr<double> ap(new double);
*ap = 2.333;
return;
}

智能指针shared_ptr

作用:跟踪引用特定对象的智能指针数,当最后一个指针过期时,才调用delete

智能指针unique_ptr

作用:唯一所有权(ownship),不允许智能指针直接拷贝赋值

Lambda函数

作用:允许使用匿名函数

说明:&表示引用变量,=表示取值变量

[](int x) {return x % 3 == 0;}
bool f(int x) {return x % 3 == 0;}
[&count, =sock]() {count++;}

包装器function

作用:用作形式参数,作为一个function包装器对象

template<class T>
T use_f(T v, std::function<T(T)> f); function<double(int, char)> f;
// 等价于
double f(int, char);

可变参数模板

作用:传递未知数量的参数

void print() {}

template<class T>
void print(T value) {
std::cout << value << std::endl;
} template<class T, class... Args>
void print(T value, Args... args) {
std::cout << value << ", ";
print(args...);
}

C++的技术探究的更多相关文章

  1. (转)Java动态追踪技术探究

    背景:美团的技术沙龙分享的文章都还是很不错的,通俗易懂,开阔视野,后面又机会要好好实践一番. Java动态追踪技术探究 楔子 jsp的修改 重新加载不需要重启servlet.如何在不重启jvm的情况下 ...

  2. 网站相关技术探究keepalive_timeout(转)

    网站相关技术探究keepalive设多少: /proc/$PID/fd/$number  0:标准输入 1:标准输出 2:标准错误   Test: [root@KTQT ~]# ll /proc/12 ...

  3. Java动态追踪技术探究(动态修改)

    Java动态追踪技术探究 Java探针-Java Agent技术-阿里面试题 秒懂Java动态编程(Javassist研究) 可以用于在类加载的时候,修改字节码. Java agent(Java探针) ...

  4. commons-pool2 池化技术探究

    一.前言 我们经常会接触各种池化的技术或者概念,包括对象池.连接池.线程池等,池化技术最大的好处就是实现对象的重复利用,尤其是创建和使用大对象或者宝贵资源(HTTP连接对象,MySQL连接对象)等方面 ...

  5. Android中直播视频技术探究之---桌面屏幕视频数据源采集功能分析

    一.前言 之前介绍了Android直播视频中一种视频源数据采集:摄像头Camera视频数据采集分析 中介绍了利用Camera的回调机制,获取摄像头的每一帧数据,然后进行二次处理进行推流.现在我们在介绍 ...

  6. Android中直播视频技术探究之---采集摄像头Camera视频源数据进行推流(采用金山云SDK)

    一.前言 在之前已经详细介绍了Android中的一种视频数据源:Camera,不了解的同学可以点击进入:Android中Camera使用详解 ,在这篇文章中我们介绍了如何采集摄像头的每一帧数据,然后进 ...

  7. Android中直播视频技术探究之---摄像头Camera视频源数据采集解析

    一.前言 在视频直播中一般都是两种视频数据源,一个是摄像头数据,一个是录制桌面数据,而一般来说美女妹子直播都是来自于摄像头数据,游戏直播都是录制桌面数据的,那么今天就来看看第一个数据源数据采集分析,A ...

  8. Android中直播视频技术探究之---视频直播服务端环境搭建(Nginx+RTMP)

    一.前言 前面介绍了Android中视频直播中的一个重要类ByteBuffer,不了解的同学可以 点击查看 到这里开始,我们开始动手开发了,因为我们后续肯定是需要直播视频功能,然后把视频推流到服务端, ...

  9. Android中直播视频技术探究之---基础知识大纲介绍

    一.前言 最近各种视频直播app到处都是,各种霸屏,当然我们也是需要体验的,关于视频直播的软件这里就不介绍了,在不是技术的人来看,直播是一种潮流,是一种娱乐方式,但是作为一个高技术的,我们除了看看,更 ...

  10. Java动态追踪技术探究

    引子 在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话: “Debug一下吧.” “线上机器,没开Debug端口.” “看日 ...

随机推荐

  1. Net is as typeof 运行运算符详解

    概述 在了解运行运算符的前提我们需要了解什么是RTTI ,在任何一门面向对象的语言中,都有RTTI这个概念(即 运行时). RTTI(Run-Time Type Identification),通过运 ...

  2. c# List< int>和List< string>互相转换

    c# List< int>和List< string>互相转换 定义一个list< t> List<int> list = new List<in ...

  3. [android] 轮播图-无限循环

    实现无限循环 在getCount()方法中,返回一个很大的值,Integer.MAX_VALUE 在instantiateItem()方法中,获取当前View的索引时,进行取于操作,传递进来的int ...

  4. 浅谈Http协议是怎么回事?

    老实说关于http协议这个概念,见到最多的还是各类招聘信息.在平时的工作中,除了了解一些请求,响应,请求头这些概念外,对于http协议也没有太多的关心.因为貌似对平时的工作没有什么影响,所以在写这篇关 ...

  5. [转载]常用 SQL Server 规范集锦

    转载者注:据说是某公司(携程)内部规范. 常见的字段类型选择 1.字符类型建议采用varchar/nvarchar数据类型 2.金额货币建议采用money数据类型 3.科学计数建议采用numeric数 ...

  6. 【Mybatis】XML配置实现增删改查

    ①创建数据库和表,数据库为mytest,表为users CREATE DATABASE mytest; USE mytest; DROP TABLE IF EXISTS users; CREATE T ...

  7. 【 js 基础 】【读书笔记】作用域和闭包

    一.编译过程 常见编译性语言,在程序代码执行之前会经历三个步骤,称为编译. 步骤一:分词或者词法分析 将由字符组成的字符串分解成有意义的代码块,这些代码块被称为词法单元. 例子:  var a = 2 ...

  8. SVG生成字体图标详解

  9. 设计模式原则(4)--Interface Segregation Principle(ISP)--接口隔离原则

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.定义: 使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口. 2.使用场景: 类A ...

  10. Monkey Android app稳定性测试工具之Monkey使用教程

    Monkey Android app稳定性测试工具之Monkey使用教程 by:授客 QQ:1033553122 由于篇幅问题,仅提供百度网盘下载链接: Android app稳定性测试工具之Monk ...